高可用性和可伸缩性
成功的生产环境要求数据库系统始终可用,计划的中断要降到最少(如果有),并且数据库系统还可随着业务需求的变化而快速轻松地伸缩。
计划或意外中断期间,公司必须提供对数据资源的连续访问。计划的中断包括定期维护软件或硬件。意外中断是指意外的系统故障,如断电、断网、硬件故障、操作系统或其他软件错误。如果发生灾难,如地震或海啸,可能出现大范围的系统故障。
公司希望避免系统中的服务器过载,以确保数据可用性和防止服务拒绝攻击等。
公司还希望在业务增长时、季节性业务高峰期和月末或年终处理期间,快速轻松地扩展系统。
具有以下一项或多项功能的系统可轻松应对中断,并可提高数据可用性:
冗余
系统维护辅助服务器(充当主服务器的备份且在发生故障时接管主服务器)的能力。
故障转移
系统将所有工作负载从失败的服务器转移到另一个服务器的能力。
工作负载均衡
系统自动将客户机请求转向工作负载能力最高的服务器的能力。
可伸缩性
系统利用更多资源(如处理器、内存或磁盘空间)的能力。
通过维护将影响最小化
快速轻松维护所有服务器,以便尽可能降低用户应用程序受到的影响的能力。
高可用性和可伸缩性策略
可定制 GBase 8s 数据库软件来创建适当的高可用性和可伸缩性解决方案,以满足业务目标和环境需求。
要确定为实现高可用性和可伸缩性而定制数据库系统的最佳方法,必须确定有助于实现业务目标的策略。可使用适当的 GBase 8s 技术和组件来为这些策略提供支持。
支持高可用性和可伸缩性的组件
GBase 8s 数据库软件中包含若干可定制的组件,用于创建提供不中断连续服务的系统,以便将停机时间和维护降到最低。
- 集群
- Enterprise Replication
- 连接管理器
- 网格
集群
集群由通过网络连接的单个主服务器和一个或多个辅助服务器组成。如果集群中的主服务器出现故障,辅助服务器可接管主服务器的角色。
主服务器是拥有数据主副本且与集群中所有辅助服务器相连的数据库服务器。辅助服务器是与主服务器相连且包含或具有与主服务器相同的数据访问权的数据库服务器。集群中的主服务器和辅助服务器都配置了相同的硬件和软件。
应用程序可在任何服务器上启动。应用程序无需“感知”任何特定服务器。主服务器和辅助服务器之间的通信是安全的。此外,客户机应用程序与所有服务器之间的通信也是安全的。
辅助服务器可位于主服务器附近(同一房间,同一层或同一建筑物中),也可在地理上远离主服务器(如位于另一建筑物,另一个城市或另一个国家/地区)。 有些辅助服务器与主服务器具有相同的数据访问权,而另一些辅助服务器通过同步与主服务器包含相同数据。主服务器上落实了事务之后,主服务器会将全部事务发送到辅助服务器。主服务器不发送未落实的事务,所以数据库数据是可靠的。有关辅助服务器的描述,请参阅表 1。这些辅助服务器与主服务器同步,以构建连续可用的可伸缩数据存储。
表 1. 辅助服务器的类型
辅助服务器类型 | 描述 |
---|---|
共享磁盘 (SSC) 辅助服务器 | 与主服务器共享磁盘空间的服务器。这种类型的辅助服务器不在自己的磁盘空间中维护物理数据库副本;而是与主服务器共享磁盘。 |
高可用性数据复制 (HAC) 辅助服务器 | 该服务器通过同步或异步数据复制维护整个主服务器的备份副本。 如果主服务器出现故障,应用程序可快速访问这种类型的辅助服务器。 |
远程独立 (RHAC) 辅助服务器 | 该服务器维护数据的完整副本,并通过安全网络连接从主服务器异步传输更新。这种类型的辅助服务器在地理位置上可与主服务器之间有很远的距离,并且可在灾难恢复场景中充当远程备份服务器。 |
下面是集群的优势:
- 接收复制数据的站点上的客户机性能有了提高,因为那些客户机可以本地访问数据,而不是通过网络连接至远程数据库服务器。
- 所有站点上的客户机可感受复制数据可用性有所提高。如果复制数据的本地副本不可用,客户机还可访问数据的远程副本。
如下图所示,主数据库服务器管理的数据发生更改后,辅助数据库服务器上会随之动态更新。
图: 集群配置中的主数据库服务器和辅助数据库服务器
如果某个数据库服务器发生故障(如下图中所示),那么可以将使用该数据库服务器的客户机重定向至该对中的其他数据库服务器,这将成为主服务器。
图: 发生故障后数据复制配置中的数据库服务器和客户机
Enterprise Replication
基于日志记录的一种异步工具,用于在 GBase 8s 数据库服务器之间复制数据。 Enterprise Replication 实施异步数据复制,从而容许网络和目标数据库服务器中断。如果数据库服务器或网络发生故障,本地数据库服务器将继续为本地用户提供服务。在远程服务器可用之前,本地数据库服务器将已复制的事务存储在持久存储中。源服务器上的 Enterprise Replication 通过以下方法捕获要复制的事务:读取逻辑日志,存储事务,然后以可靠方式将每个事务作为复制数据传输到目标服务器。
Enterprise Replication 确保所有数据到达适当的服务器,而无论网络或系统是否发生故障。如果发生故障,Enterprise Replication 将存储数据,直到网络或系统恢复运行。 Enterprise Replication 将数据复制和发送量降到最低,从而有效复制数据。
连接管理器
连接管理器是用于自动管理和定向客户机连接请求的程序。它根据系统管理员配置的,称为服务级别协议 (SLA) 的重定向规则来重定向请求。
可使用连接管理器故障转移配置功能来配置自动故障转移。如果连接管理器检测到主服务器出现故障,并且在接下来的超时周期期间主服务器未执行任何操作来重新连接,那么最适合的辅助服务器将转换为主服务器。可通过使用配置文件来配置连接管理器的故障转移参数。
连接管理器执行可配置的负载均衡,这样客户机将基于服务器的工作负载进行重定向。连接管理器连接到集群中的每台服务器,收集有关服务器类型、未使用的工作负载容量及当前服务器状态的统计信息。 通过这些信息,连接管理器将客户机连接重定向到活动量最少的服务器。
可在不同计算机上配置多个连接管理器实例,以避免连接管理器成为单个故障点。可以在 GBase 8s 服务器实例上安装和运行连接管理器,或者为了将连接管理器从数据库服务器的故障中隔离开,也可以将其安装到单独的非 GBase 8s 机器上。此外,还可将连接管理器配置为在集群以外的机器的硬件平台上运行。
要进一步增加可用性,可配置多个连接管理器实例。要避免连接管理器成为单个故障点,配置多个连接管理器实例尤为重要。发生连接管理器故障之后,客户机仍然保持与服务器的连接;但是,除非配置了另一个连接管理器实例来充当备份,否则新客户机连接不能连接到服务器。如果连接管理器出现故障,配置另一个连接管理器实例来充当备份之前,所有客户机连接都将丢失。
除了在高可用性集群内执行客户机应用程序重定向之外,还可使用连接管理器将连接请求路由到复制集中的一个或多个服务器。配置连接管理器以指定服务器的名称和有序列表(这些服务器全部位于同一个 Enterprise Replication 域中),然后指定服务级别协议 (SLA) 名称和重定向策略。重定向策略指定客户机将连接的目标数据库服务器的类型或名称。客户机应用程序使用 SLA 名称连接到正确的数据库服务器。
网格
网格是一种互连的复制服务器的命名集合,用于将命令从授权服务器传播到集合中的其余服务器。与电网在区域内分配电力非常相似,您定义的网格将 SQL 命令分发给网格中的复制服务器。如果您有多个复制服务器,并且经常需要在每个复制服务器上执行相同任务,那么网格可能非常有用。可通过网格轻松运行以下类型的任务:
- 管理服务器;例如,添加块、除去逻辑日志或更改配置参数设置
- 更新数据库模式;例如,变更表或添加表
- 运行或创建存储过程或用户定义的例程
- 更新数据;例如,基于条件清除旧数据或更新值
- 维护复制:创建表时启用复制,并且在变更复制的表时变更复制定义。
数据复制的优点
数据复制的优势并非不需成本。数据复制显然需要更多存储,并且更新复制数据可能比更新单个对象要花费更多处理时间。
可以通过明确指定何处数据必须更新,从而以客户机应用程序的逻辑实现数据复制。但这种实现数据复制的方法成本高昂、容易出错且难以维护。相反,数据复制的概念通常与复制透明度相结合。 将复制透明度构建到数据库服务器(而非构建到客户机应用程序)以自动处理定位和维护数据副本的详细信息。
集群与镜像
集群和镜像是提高容错性的透明方法。
镜像中所述的镜像是单个数据库服务器用以维护不同磁盘上的特定数据库空间副本的机制。该机制保护镜像数据库空间中的数据免受磁盘故障的影响,因为数据库服务器自动更新两个磁盘上的数据,并且在一个数据库空间发生故障时自动使用另一磁盘。
或者,集群在一个完全独立的数据库服务器上复制另一个数据库服务器管理的所有数据,而不仅仅是复制指定的数据库空间。因为集群涉及两个不同的数据库服务器,所以它不仅可保护这两个数据库服务器管理的数据免受磁盘故障影响,而且可保护这些数据免受所有类型的数据库服务器故障影响(包括计算机故障或整个站点的灾难性故障)。
图: 镜像和集群的比较
集群与两阶段落实
两阶段落实协议(在多阶段落实协议中详细描述)确保跨多个数据库服务器统一落实或回滚事务。
理论上,可以利用两阶段落实来复制数据,方法是配置使用相同数据的两台数据库服务器并随后在其中一台数据库服务器上定义触发器,用于复制另一数据库服务器的更新。但是,这种实现在不同故障场合中有很多同步问题。 另外,分布式事务的性能比集群的性能要差。
集群中复制的数据类型
高可用性集群复制可复制数据库空间和智能大对象空间中的数据,但不会复制 BLOB 空间中的数据。
所有内置和扩展数据类型都将复制到辅助服务器。必须记录用户定义的类型 (UDT),并且这些类型必须位于单一数据库服务器中。 如果行外数据存储在智能大对象空间中或在同一数据库服务器上的不同表中,那么复制带有行外数据的数据类型。 对于要复制的存储在智能大对象空间中的数据,必须记录智能大对象空间。
不复制操作系统文件中存储的数据,或不复制与用户定义的例程关联的持久外部文件或内存对象中存储的数据。
用户定义的类型和用户定义的例程有特殊的安装和注册需求。有关指示信息,请参阅数据初始复制的工作原理。
主要和辅助数据库服务器
当您配置一组数据库服务器以使用数据复制时,一个数据库服务器被称为主数据库服务器,其他数据库服务器被称为辅助数据库服务器。(在此上下文中,不使用数据复制的数据库服务器称为标准数据库服务器。)辅助服务器可包含 SSC 辅助服务器、RHAC 辅助服务器和 HAC 辅助服务器的任何组合。
如下图所示,主数据库服务器管理的数据发生更改后,辅助数据库服务器上会随之动态更新。
图: 数据复制配置中的主数据库服务器和辅助数据库服务器
如果某个数据库服务器发生故障(如下图中所示),那么可以将使用该数据库服务器的客户机重定向至该对中的其他数据库服务器,这将成为主服务器。
图: 发生故障后数据复制配置中的数据库服务器和客户机
透明缩放与工作负载平衡策略
GBase 8s 服务器可轻松伸缩,也可动态执行工作负载均衡,以确保对资源进行最优使用。
GBase 8s 可实现以下目标:
- 定期增加容量
- 增加报告容量实现的地理分散处理
- 均衡工作负载以优化资源的使用
定期增加容量
如果业务环境遇到了高峰期,可能需要定期增加容量。可以通过添加远程独立辅助服务器来增加容量。这种类型的辅助服务器维护数据的完整副本,并通过安全网络连接从主服务器异步传输更新。如果数据量极大,难以为其创建多个副本,那么可使用共享磁盘服务器,而不是远程独立辅助服务器。如果只需为报告(只读)工作负载增加容量,可使用高可用性数据复制 (HAC) 辅助服务器。
表 1. 共享磁盘辅助服务器提供的可伸缩性
优点 | 潜在缺点 |
---|---|
可用性极高。这种辅助服务器与主服务器共享磁盘。 | ● 无故障转移。这种辅助服务器可能会配置为与主服务器在同一计算机硬件上运行。 ● 无数据冗余。此辅助服务器不维护数据副本。(使用 SAN 设备进行磁盘存储。) ● 主辅助服务器和辅助服务器需要相同的硬件、操作系统和数据库服务器产品版本。 |
由于以下原因而使用 SSC 辅助服务器:
-
增加的报告容量
多台辅助服务器使您能够在不影响主服务器的情况下卸载报告功能。
-
服务器故障备份
如果主服务器出现故障,那么 SSC 辅助服务器可快速并轻易地提升为主服务器。 例如,如果您正在使用提供足够和可靠磁盘存储器的 SAN(存储区域网络)设备,但是却担心服务器故障,那么 SSC 辅助服务器可提供可靠的备份。
表 2. 远程独立辅助服务器提供的可伸缩性
优点 | 潜在缺点 |
---|---|
● 数据冗余。这种辅助服务器维护数据的副本。 ● 故障转移。辅助服务器可在地理上远离主服务器,如位于另一建筑物,另一个城市或另一个国家/地区。 ● 无需更改应用程序。服务器出现故障时,可自动切换客户机与主服务器或辅助服务器的连接。 | 主辅助服务器和辅助服务器需要相同的硬件、操作系统和数据库服务器产品版本。 |
增加报告容量实现的地理分散处理
如果公司在多处具有办事处,那么可能希望使用本地服务器来处理本地请求,而不是依赖于单个集中服务器。在这种情况下,可设置 Enterprise Replication 服务器网络。这样将容许目标数据库服务器中断。如果数据库服务器或网络出现故障,本地数据库服务器将继续为本地用户提供服务。在远程服务器可用之前,本地数据库服务器将已复制的事务存储在持久存储中。源服务器上的 Enterprise Replication 通过以下方法捕获要复制的事务:读取逻辑日志,存储事务,然后以可靠方式将每个事务作为复制数据传输到目标服务器。
表 3. Enterprise Replication 提供的可伸缩性
优点 | 潜在缺点 |
---|---|
● 服务器可位于另一建筑物,另一个城市或另一个国家/地区。 ● 服务器可安装在不同硬件上。 ● 服务器可在不同操作系统上运行。 ● 服务器可运行不同版本的数据库服务器产品。 ● 可复制少量数据(基于日志的异步复制)。 ● 使用多个连接管理器执行客户机自动重定向,从而通过添加共享磁盘辅助服务器来协助复制服务器。 | ● 可能存在冲突。 ● 事务可能失败。在这种情况下,必须修复不一致的数据。 |
由于以下原因而在您的环境中使用 RHAC 辅助服务器:
-
增加的服务器可用性
一个或多个 RHAC 辅助服务器通过维护多个可用于增加可用性的服务器来提供进一步的保证。
-
地理位置上的远程备份支持
通常需要将辅助服务器安装在距离站点一段距离的位置,以备在最坏情况下灾难恢复场景所用。RHAC 辅助服务器是理想的远程备份解决方案。 如果辅助服务器位于 WAN(广域网)上,那么主 HAC 和辅助 HAC 之间的高级别调整可引起性能问题。使主服务器与辅助服务器保持相对密切的关系可以简化维护并将对性能的影响降到最低。
-
改善的报告性能
多台辅助服务器使您能够在不影响主服务器的情况下卸载报告功能。此外,RHAC 辅助服务器配置使得分开报告需求和 HA 需求变得更容易,从而产生更适合于这两种环境的解决方案。
-
不稳定网络上的可用性
如果检查点同步到达,那么较慢或不稳定的网络环境可导致主服务器和辅助服务器都延迟。RHAC 辅助服务器配置使用全双工联网,而且不需要这种调整。 如果在主服务器和 RHAC 辅助服务器之间的网络性能未达到最佳状态,那么 RHAC 辅助服务器将是一种极具吸引力的解决方案。
均衡工作负载以优化资源的使用
创建或修改服务级别协议 (SLA) 时,可配置工作负载均衡。GBase 8s 从集群中的每个服务器收集信息,并将客户机应用程序自动连接到活动量最少的服务器。
可在集群内创建特定于某些应用程序类型的组,如用于联机事务处理 (OLTP) 或仓库的应用程序。 应用程序可选择连接到特定组,以为每种类型的查询实现最佳性能。
高可用性策略
可配置 GBase 8s,以在各种业务情况中最大化可用性。
目标 | 策略 | 优点 | 潜在缺点 |
---|---|---|---|
在服务器出现故障时保护系统 | 使用与主服务器共享磁盘空间的辅助服务器。(共享磁盘辅助服务器) | ● 可用性极高。此辅助服务器与主服务器具有相同的数据访问权。如果主服务器出现故障,辅助服务器可快速接管。 ● 数据库始终处于同步状态,因为此辅助服务器与主服务器具有相同的数据访问权。 ● 无需更改应用程序。服务器出现故障时,可自动切换客户机与主服务器或辅助服务器的连接。 | ● 此辅助服务器与主服务器位于同一台计算机上。 ● 无数据冗余。此辅助服务器不维护数据副本。(使用 SAN 设备进行磁盘存储。) ● 主辅助服务器和辅助服务器需要相同的硬件、操作系统和数据库服务器产品版本。 ● 辅助服务器硬件必须可以处理与主服务器相同的负载。如果辅助服务器过小,可能会影响主服务器的性能。 |
在站点出现故障时进行保护 | ● 使用维护数据库服务器和数据副本的辅助服务器。(高可用性数据复制服务器) ● (也可使用 RHAC 和 ER) | ● 可用性极高。应用程序如果不能连接到主服务器,可快速访问此服务器。 ● 数据同步复制。 ● 提高了可伸缩性 ● 无需更改应用程序 | ● 位于主服务器本地 ● 需要数据的精确副本(包括表和数据库模式)。 ● 主辅助服务器和辅助服务器需要相同的硬件、操作系统和数据库服务器产品版本。 |
多级别站点故障保护 | ● 使用地理上远离主服务器且从主服务器异步更新的辅助服务器。(远程独立辅助服务器) ● (也可使用 ER) | ● 可用性极高。应用程序如果不能连接到主服务器,可快速访问此服务器。 ● 数据异步复制。 ● 提高了可伸缩性 ● 无需更改应用程序 | |
站点故障保护实现的地理分散处理 | ER 和 HAC | ER 和 ER 的备份 | 需要多个连接管理器 |
高可用性集群配置
这些主题描述了如何为 GBase 8s 规划、配置、启动和监视高可用性集群,以及如何在介质发生故障后复原数据。 如果计划使用高可用性集群,请首先阅读本节中的所有主题。如果计划使用 GBase 8s Enterprise Replication,请参阅《 GBase 8s Enterprise Replication 指南》。
高可用性和可伸缩性说明了什么是高可用性集群、其工作原理,以及如何为集群环境设计客户机应用程序。
高可用性集群规划
在您开始设置计算机和数据库服务器以使用高可用性集群之前,您可能想要做一些初步规划。以下列表包含要执行的规划任务:
- 选择并获取适当的硬件。
- 如果是使用多个数据库服务器来存储要复制的数据,那么迁移并重新分发数据,使其可以由单一数据库服务器管理。
- 确保希望复制的所有数据库使用事务日志记录。要打开事务日志记录,请参阅管理数据库日志记录方式。
- 开发客户机应用程序以同时利用复制对中的两个数据库服务器。有关设计注意事项的说明,请参阅数据复制客户机的重定向和连接和设计数据复制组客户机。
- 为第一次启动 HAC 创建调度。
- 为主数据库服务器设计存储空间和逻辑日志备份调度。
- 为如何处理其中一个数据库服务器的失败以及如何在失败后重新启动 HAC 生成一个计划。请阅读数据复制客户机的重定向和连接。
配置集群
要将系统配置为高可用性集群,必须执行以下操作:
- 满足硬件和操作系统要求。
- 满足数据库和数据要求。
- 满足数据库服务器配置要求。
- 配置连接。
以上每个主题均在本节中进行了说明。
您可以配置系统以便使用安全套接字层 (SSL) 协议进行 HAC 通信,SSL 协议是一个可以确保基于网络传送数据的隐私和完整性的通信协议。 在高可用性配置中,您可以使用 SSL 协议以实现主服务器和辅助服务器的连接,以及与远程独立 (RHAC) 服务器和共享磁盘 (SSC) 辅助服务器的连接。
集群的硬件和操作系统需求
要使高可用性集群运行,硬件必须满足特定需求。
硬件必须满足以下需求:
- 主服务器和辅助服务器必须能够运行相同的 GBase 8s 可执行映像,即便主服务器和辅助服务器没有相同的硬件或操作系统也不例外。 例如,可以使用具有不同 Linux™ 32 位操作系统的服务器,因为这些操作系统可以运行相同的 GBase 8s 可执行映像。在这种情况下,不能添加 Linux 64 位操作系统的服务器,因为该操作系统需要不同的 GBase 8s 可执行映像。 检查机器说明文件:可以使用相同机器说明文件中列为支持的硬件和操作系统的任意组合。
- 运行主数据库服务器和辅助数据库服务器的硬件必须支持网络能力。
- 分配给主数据库服务器和辅助数据库服务器的数据库空间的磁盘空间量必须相等。磁盘空间类型是不相关的;您可以在两个数据库服务器上使用任何原始或熟空间组合。
- 每台计算机上的块具有相同的路径名。允许将符号链接用于 UNIX™ 平台。
集群的数据库和数据需求
要使高可用性集群运行,数据库和数据必须满足特定需求。
数据库和数据必须满足以下需求:
-
必须记录所有数据。
所有希望复制的数据库必须将事务日志记录打开。
该要求很重要,因为辅助数据库服务器使用主数据库服务器的逻辑日志记录来更新它管理的数据。如果主数据库服务器管理的数据库不使用日志记录,那么对那些数据库的更新不会生成日志记录,这样辅助数据库服务器就没有更新复制数据的手段。日志记录可以是已缓冲日志记录,也可以是未缓冲日志记录。
如果必须在启动 HAC 之前打开事务日志记录,请参阅使用 ontape 打开事务日志记录。
-
数据必须位于数据库空间或智能大对象空间中。
如果主数据库服务器具有存储在 BLOB 空间中的简单大对象,那么在那些 BLOB 空间中对数据的修改将不会作为正常的 HAC 处理的一部分进行复制。但要复制数据库空间中的简单大对象数据。
复制存储在智能大对象空间中的智能大对象。 必须记录智能大对象空间。复制用户定义的类型 (UDT),除非它们有存储在操作系统文件中的行外数据。 如果行外数据存储在智能大对象空间中或在同一数据库服务器上的不同表中,那么复制带有行外数据的数据类型。
-
辅助服务器不得使用磁盘压缩。
如果使用 GBase 8s 磁盘压缩功能,源表中的压缩数据在目标表中也处于压缩状态。不能在 HAC 辅助服务器、RHAC 辅助服务器或 SSC 辅助服务器上执行压缩操作,因为 HAC 目标服务器必须具有与源服务器相同的数据和物理布局。
集群的数据库服务器配置需求
要使高可用性集群服务器对运行,必须完全配置每个数据库服务器。有关配置数据库服务器的信息,请参阅数据库服务器的安装和配置。然后您可以使用该配置的相关方面来配置该数据库服务器对中另一数据库服务器。有关配置参数的更多信息,请参阅《GBase 8s 管理员参考》。
这些主题描述了以下有关集群数据库服务器对的配置注意事项:
数据库服务器版本
主数据库服务器和辅助数据库服务器上的数据库服务器版本必须相同。
存储空间和块的配置
在主数据库服务器和辅助数据库服务器上,数据库空间数、块数、它们的大小、路径名以及它们的偏移量必须相同。 此外,如果 HAC 辅助服务器用于创建活动报告,那么该配置必须至少包含一个临时数据库空间。请参阅用于排序的临时数据库空间和临时表的使用。
仅限 UNIX™:
必须按在 UNIX 上分配原始磁盘空间中所述,为块路径名使用符号链接。
如果不为块路径名使用符号链接,那么无法轻松更改块的路径名。有关更多信息,请参阅重命名块。
以下 ONCONFIG 参数在每个数据库服务器上都必须具有相同值:
- ROOTNAME
- ROOTOFFSET
- ROOTPATH
- ROOTSIZE
HAC 环境中的非缺省页大小
数据库空间的页大小和缓冲池规范自动从主数据库服务器向辅助数据库服务器传播。虽然主数据库服务器和辅助数据库服务器必须具有相同的缓冲池,但是缓冲池中的缓冲区数无需匹配。
镜像
无需将两个数据库服务器上的 MIRROR 参数设置为相同的值;您可以启用一个数据库服务器上的镜像,而禁用另一数据库服务器上的镜像。但如果 您为主数据库服务器的 Root 块指定镜像块,那么必须也为辅助数据库服务器上的 Root 块指定镜像块。因此,以下 ONCONFIG 参数必须在两个数据库服务器上设置为相同的值:
- MIRROROFFSET
- MIRRORPATH
物理日志配置
物理日志在两个数据库服务器上必须相同。以下 ONCONFIG 参数在每个数据库服务器上都必须具有相同值:
- PHYSBUFF
- PHYSFILE
数据库空间和逻辑日志磁带备份设备
您可以为主数据库服务器和辅助数据库服务器指定不同磁带设备。
如果您使用 ON-Bar,那么在两个数据库服务器上将 ON-Bar 配置参数设置为相同的值。有关 ON-Bar 参数的信息,请参阅《GBase 8s 备份与复原指南》。
如果使用 ontape,那么存储空间和逻辑日志备份设备的磁带大小和磁带块大小必须相同。以下 ONCONFIG 参数在每个数据库服务器上都必须具有相同值:
- LTAPEBLK
- LTAPESIZE
- TAPEBLK
- TAPESIZE
要用足磁带的物理容量,请将 LTAPESIZE 和 TAPESIZE 设置为 0。
逻辑日志配置
将所有日志记录复制到辅助服务器。 您必须为两个数据库服务器配置相同数目的逻辑日志文件和相同的逻辑日志大小。以下 ONCONFIG 参数在每个数据库服务器上都必须具有相同值:
- LOGBUFF
- LOGFILES
- LOGSIZE
- DYNAMIC_LOGS
数据库服务器记录逻辑日志文件的添加。在主服务器上动态添加的逻辑日志文件将在辅助服务器上自动复制。尽管辅助服务器上的 DYNAMIC_LOGS 值不起作用,请保持主服务器上 DYNAMIC_LOGS 与值的同步,以免它们切换角色。
HAC 配置参数
以下 HAC 配置参数在复制对中的两个数据库服务器上必须设置为相同的值:
- DRAUTO
- DRINTERVAL
- DRTIMEOUT
对于高可用性集群中的 HAC、RHAC 和 SSC 辅助服务器,必须通过将 TEMPTAB_NOLOG 配置参数设置为 1 来始终禁用对临时表的逻辑日志记录。
集群事务协调
可以设置 CLUSTER_TXN_SCOPE 配置参数或运行 SET ENVIRONMENT CLUSTER_TXN_SCOPE 语句来要求客户机应用程序运行的操作在集群中完全传播或在辅助服务器上应用之前不接收任何落实。
如果客户机应用程序执行了多步骤操作(如装入或更新数据),然后尝试处理其他服务器会话中或高可用性集群中其他节点上的数据,那么该操作可能会因异步日志处理而失败。 装入或更新操作必须在集群数据库节点上应用,然后才能在该节点上进行处理。集群事务协调将强制操作等待在集群范围或在辅助服务器上的应用完成,然后才返回落实。集群事务协调可确保多步骤过程中的各步骤按顺序完成。
DELAY_APPLY 或 STOP_APPLY 配置参数值不为 0 的远程独立辅助 (RHAC) 服务器无法参与集群事务协调。
为集群配置安全连接
要使高可用性集群能够运行,数据库服务器相互之间必须建立可信连接。通过使用 sqlhosts 文件中的连接安全性选项并创建 hosts.equiv 文件,可以保护集群服务器之间的连接。通过使用 sqlhosts 文件中的连接安全性选项并使用 REMOTE_SERVER_CFG 配置参数指定的一个或多个 hosts.equiv 文件,可以保护集群服务器之间的连接。
sqlhosts 文件中列出的安全端口只能用于集群通信。客户机应用程序不能连接到安全端口。
要配置可信环境用于复制,请执行以下操作:
-
在集群中每台服务器上编辑 sqlhosts 文件:
-
为该计算机上运行的数据库服务器添加一个条目,并包含 s=6 选项。
-
为集群中的其他所有服务器添加条目。不要在这些条目中包含 s=6 选项。
-
-
设置 sqlhosts 文件或注册表的 nettype 字段,并将 NETTYPE 配置参数设置为网络协议(例如,ontlitcp 或 onsoctcp),以便两个不同计算机上的数据库服务器可以相互通信。不能使用非网络协议,例如onipcshm、onipcstr 或onipcnmp。
-
在 $GBASEDBTDIR/etc 目录中创建 hosts.equiv 文件,并包含其他集群服务器的主机名,每个主机名单独占用一行。
文件的所有者必须是属于组 gbasedbt 的用户 gbasedbt,并且必须限制许可权,这样只有用户 gbasedbt 可以修改该文件(使用 octal 许可权时,允许值为 644、640、444 或 440 中的一个)。
-
通过以下某种方法设置可信主机信息
- 在 $GBASEDBTDIR/etc 目录中创建 hosts.equiv 文件,并包含其他集群服务器的主机名,每个主机名单独占用一行。文件的所有者必须是属于组 gbasedbt 的用户 gbasedbt,并且必须限制许可权,这样只有用户 gbasedbt 可以修改该文件(使用 octal 许可权时,允许值为 644、640、444 或 440 中的一个)。
- 将 S6_USE_REMOTE_SERVER_CFG 配置参数设置为 1,然后将 REMOTE_SERVER_CFG 配置参数设置为包含其他集群服务器的主机名的文件。
-
创建服务器别名,用于运行实用程序和客户机应用程序。
例如,将 GBASEDBTSERVER 环境变量设置为该别名,以便运行实用程序(例如,onstat 和 ontape)和客户机应用程序(例如,DB-Access)。
首次启动 HAC
当您完成了 HAC 的配置后,您将准备启动 HAC。本主题描述了启动 HAC 的必需步骤。
您希望在两个数据库服务器(ServerA 和 ServerB)上启动 HAC。启动 HAC 的过程(将 ServerA 用作主数据库服务器,将 ServerB 用作辅助数据库服务器)将在以下步骤中进行描述。下表列出了执行每个步骤所需的命令以及发送到消息日志的消息。您可以使用 ontape 或 ON-Bar 执行备份与复原。您必须在整个过程中使用相同的实用程序。
即使使用 ON-Bar 执行备份与复原,两个数据库服务器上仍然需要 ontape 实用程序来执行备份和应用逻辑日志。不要从参与 HAC 集群环境的数据库服务器除去 ontape 实用程序。
还可以使用外部备份与复原来设置 HAC。 请参阅《GBase 8s 备份与复原指南》,以获取有关如何执行外部备份与复原的信息。请参阅使用 ontape STDIO 功能来减少设置时间,以获取直接从 HAC 主服务器设置 HAC 辅助服务器的最快方法。
要启动 HAC,请执行以下操作:
-
在两个数据库服务器上均安装用户定义的类型和用户定义的例程然后仅在 ServerA 上注册它们。
-
创建 ServerA 的 0 级备份。
-
使用 onmode -d 命令将 ServerA 的类型设置为主类型并指示相关联的辅助数据库服务器的名称(在本例中为 ServerB)。
当您发出 onmode -d 命令时,数据库服务器将尝试与 HAC 对中的另一数据库服务器建立连接并启动 HAC 操作。仅当复制对中另一数据库服务器已经设置为正确类型时,建立连接的尝试才会成功。
此时,ServerB 未在线且未设置为类型辅助,因此将不会建立 HAC 连接。
-
从您在步骤 1 中创建的 0 级备份执行对 ServerB 的物理复原。不要执行逻辑复原。
如果您使用的是:
- ON-Bar,请使用 onbar -r -p 命令来执行物理复原。
- ON-Bar 并正在执行外部复原,请使用 onbar -r -p -e 命令来执行物理复原。
- ontape,使用 ontape -p 选项。 您无法使用 ontape -r 选项,因为它同时执行物理复原和逻辑复原。
注意如果主服务器和辅助服务器位于两台不同的机器上,那么必须将主服务器的物理复原放在辅助服务器上。物理复原的位置将由 onconfig 参数 TAPE 定义。 必须先在辅助服务器上设置 IFX_ONTAPE_FILE_PREFIX 变量,然后才能运行 ontape -p。
- ontape 并正在执行外部复原,请使用 ontape -p -e 命令来执行物理复原。
-
使用 onmode -d 命令将 ServerB 的类型设置为辅助类型并指示相关联的主数据库服务器。
ServerB 尝试与主数据库服务器 (ServerA) 建立 HAC 连接,并启动操作。必须成功建立连接。
在 HAC 开始前,辅助数据库服务器使用自步骤 2 以来写入主数据库服务器的逻辑日志记录来执行逻辑恢复。如果所有这些逻辑日志记录仍然位于主数据库服务器磁盘上,那么主数据库服务器将通过网络直接将这些记录发送到辅助数据库服务器,并且自动执行逻辑恢复。
如果您已备份并释放主数据库服务器上的逻辑日志文件,那么这些文件中的记录不再在磁盘上。 辅助数据库服务器会提示您从磁带恢复这些文件。在这种情况下,您必须执行步骤 6。
重要在同一会话期间,必须完成步骤 4 到 5。如果必须在步骤 4 后关闭并重新启动辅助数据库服务器,那么必须重新执行步骤 4。
-
如果写入主数据库服务器的逻辑日志记录不再在主磁盘上,那么辅助数据库服务器会提示您从磁带备份恢复这些文件。
如果辅助数据库服务器必须通过网络读取备份逻辑日志文件,那么将辅助数据库服务器上的磁带设备参数设置为正在运行主数据库服务器的计算机上的设备或设置为与主数据库服务器处于相同位置的设备。
在您恢复磁带上的所有逻辑日志文件后,逻辑复原将完成使用主数据库服务器磁盘上的逻辑日志文件。
下表说明了前面的步骤,这样您可以清楚地确定在主服务器上执行的步骤和在辅助服务器上执行的步骤。该表还显示在执行每个步骤之后写入日志文件的信息。
表 1. 首次启动 HAC 的步骤
步骤 | 在主服务器 (ServerA) 上 | 在辅助服务器 (ServerB) 上 |
---|---|---|
1. | 安装 UDR、UDT 注册 UDR、UDT模块。 | 安装 UDR、UDT |
2. | ontape 命令: 运行 ontape -s -L 0 ON-Bar 命令 : 运行 onbar -b -L 0 发送至消息日志的消息: Level 0 archive started on rootdbs Archive on rootdbs completed | |
3. | onmode 命令 onmode -d primary sec_name 发送至消息日志的消息: DR: new type = primary server name = sec_name DR: Trying to connect to secondary server DR: Cannot connect to secondary server | |
4. | ontape 命令 运行 ontape -p 或 ontape -p -e 当提示您备份日志时回答否。 ON-Bar 命令 运行 onbar -r -p 或 onbar -r -p -e 发送至消息日志的消息: GBase 8s Database Server Initialized -- Shared Memory Initialized Recovery Mode Physical restore of rootdbs started Physical restore of rootdbs completed | |
5. | 运行 onmode -d secondary prim_name 发送至消息日志的消息: DR: new type = secondary, primary server name = prim_name 如果自步骤 1 以来写入主数据库服务器的所有逻辑日志记录仍位于主数据库服务器磁盘上,那么辅助数据库服务器将读取这些记录以执行逻辑恢复。(否则,必须执行步骤 6)。 | |
发送至消息日志的消息: DR: Primary server connected DR: Primary server operational | 发送至消息日志的消息: DR: Trying to connect to primary server DR: Secondary server connected DR: Failure recovery from disk in progressn recovery worker threads will be started Logical Recovery Started Start Logical Recovery - Start Log n, End Log ? Starting Log Position - n 0xnnnnn DR: Secondary server operational | |
6. | ontape 命令 ontape -l ON-Bar 命令 onbar -r -l | |
发送至消息日志的消息: DR: Primary server connected DR: Primary server operational | 发送至消息日志的消息: DR: Secondary server connected DR: Failure recovery from disk in progressn recovery worker threads will be started Logical Recovery Started Start Logical Recovery - Start Log n, End Log ? Starting Log Position - n 0xnnnnn DR: Secondary server operational |
使用 ontape STDIO 功能来减少设置时间
通过使用 ontape STDIO 功能,可显著提高设置 HAC 的速度。使用此功能,ontape 会在备份期间将数据写入 shell 的标准输出,然后在复原期间从标准输入中读取该数据。 使用远程命令解释器(如 rsh 或 ssh)将 STDIO 备份与同时发生的 STDIO 复原组合在一个管道中,以允许使用一个命令行来执行 HAC(或 RHAC)辅助服务器的初始设置。由于不对磁带或磁盘执行读写操作,所以可以节省存储空间,而且无需等待备份完成即可开始复原。
请参阅《GBase 8s 备份与复原指南》以获取有关使用 STDIO 值的详细信息。
不管使用哪种备份实用程序(ontape 或 ON-Bar),都可以使用这种使用 ontape 设置 HAC 的方法。
当以这种方法使用 STDIO 时,不会在任何位置保存可用于执行复原的永久备份。 如果在源(备份)端使用 -F(假)选项,那么不会将备份记录在数据库服务器的保留页中。 此外,还会禁止任何交互式对话,并且不会显示任何提示或询问。您还必须确保管道的远程端为远程 GBase 8s 实例挑选合适的环境。 除了备份数据外,脚本不应该产生任何输出,因为备份数据由复原过程读取(例如,不启用跟踪)。
下表中的步骤必须由用户 gbasedbt 执行,脚本必须是可执行的,如果不是用完整路径调用,那么脚本必须位于主目录中。如果您需要在网络上传输保密数据,那么可以使用 ssh 来代替 rsh。
表 1. 使用 rsh 从主服务器设置 HAC 的备用方法
步骤 | 在主服务器上 | 在辅助服务器上 |
---|---|---|
1. | 安装 UDR、UDT。 | |
2. | 安装 UDR、UDT。 | |
3. | 注册 UDR、UDT 和模块。 | |
4. | 运行 onmode -d primary sec_name | |
5 | 运行 ontape -s -L 0 -t STDIO -F | rsh sec_nameontape_HDR_restore.ksh | |
6. | 运行 onmode -d secondary pri_name |
在上表中,辅助服务器上的脚本 ontape_HDR_restore.ksh 必须包含以下命令:
#!/bin/ksh
# first get the proper Gbasedbt environment set
. hdr_sec.env
# redirecting stdout and stderr required since otherwise command might never return
ontape -p -t STDIO > /dev/null 2>&1
下列步骤显示如何从辅助服务器设置 HAC。
表 2. 使用 rsh 从辅助服务器设置 HAC 的备用方法:
步骤 | 在主服务器上 | 在辅助服务器上 |
---|---|---|
1. | 安装 UDR、UDT。 | |
2. | 安装 UDR、UDT。 | |
3. | 注册 UDR、UDT。 | |
4. | 运行 onmode -d primary sec_name | |
5. | 运行 rsh pri_name ontape_HDR_backup.ksh | ontape -p -t STDIO | |
6. | 运行 onmode -d secondary pri_name |
在上表中,主服务器上的脚本 ontape_HDR_backup.ksh 必须包含以下命令:
#!/bin/ksh
# first get the proper GBase 8s environment set
. hdr_pri.env
ontape -s -L 0 -F -t STDIO
远程独立辅助服务器
这些主题概述了在高可用性环境中设置和配置远程独立 (RHAC) 辅助服务器。
比较 RHAC 辅助服务器和 HAC 辅助服务器
RHAC 辅助服务器在很多方面都与 HAC 辅助服务器相似。将日志发送到 RHAC 辅助服务器的方式与主服务器将日志发送到 HAC 辅助服务器的方式很相似。但是,RHAC 辅助服务器用于完全在异步通信框架内运行,因此对主服务器的影响达到最小。事务落实和检查点在主服务器和 RHAC 辅助服务器之间均未同步。不保证在主服务器上落实的任何事务也在同一时间在 RHAC 辅助服务器上得到落实。
在高可用性集群中,HAC 辅助服务器的日志必须优先于任何 RHAC 辅助服务器的日志。如果 HAC 辅助服务器脱机,主服务器将继续把日志发送到 RHAC 辅助服务器。但是,当 HAC 辅助服务器恢复在线时,GBase 8s 会停止向 RHAC 辅助服务器发送日志,并优先将日志发送到 HAC 辅助服务器,使其日志重放优先于 RHAC 辅助服务器。因为 HAC 辅助服务器是集群中的第一个故障转移选项,所以需要优先使用 HAC 辅助服务器日志。如果故障转移发生时 RHAC 辅助服务器日志优于于 HAC 辅助服务器日志,那么 RHAC 辅助服务器无法与新的主服务器同步。
尽管 RHAC 辅助服务器与 HAC 辅助服务器类似,但有某些操作是 HAC 辅助服务器支持的而 RHAC 辅助服务器不支持的:
- SYNC 方式
- DRAUTO 参数
- 同步检查点
对于高可用性集群中的 HAC、RHAC 和 SSC 辅助服务器,必须通过将 TEMPTAB_NOLOG 配置参数设置为 1 来始终禁用对临时表的逻辑日志记录。
为 RHAC 或 SSC 辅助服务器指定别名
利用 HA_ALIAS 配置参数将 RHAC 辅助服务器或 SSC 辅助服务器名称指定给高可用性集群配置。
以下示例显示为辅助服务器指定别名的 RHAC 辅助服务器文件的 ONCONFIG 配置中的条目。
DBSERVERNAME reports_srvr
HA_ALIAS failover_srvr
当辅助服务器与主服务器连接时,会将别名发送给主服务器。 连接管理器仲裁器可以使用该别名故障转移至辅助服务器。 如果未指定 HA_ALIAS,就使用 DBSERVERNAME。 请参阅HA_ALIAS 配置参数中设置的连接信息以获取更多信息。
索引页日志记录
要使用 RHAC 辅助服务器,必须启用索引页日志记录。
索引页日志记录的工作原理
在创建索引时,索引页日志记录将各页写入到逻辑日志,以使高可用性环境中各服务器之间的索引创建同步。
索引页日志记录将完整索引写入到日志文件,然后将该日志文件异步地传输到辅助服务器。辅助服务器可以是 RHAC 辅助服务器,也可以是 HAC 辅助服务器。 然后,将日志文件事务读入辅助服务器上的数据库。在恢复期间,辅助服务器无需重新构建索引。对于 RHAC 辅助服务器,主服务器不会等待来自该辅助服务器的确认,这允许立即访问主服务器上的索引。
使用 ONCONFIG 参数 LOG_INDEX_BUILDS 控制索引页日志记录。将 LOG_INDEX_BUILDS 参数设置为 1(已启用),可在主服务器上构建索引,然后将其发送到辅助服务器。
启用或禁用索引页日志记录
使用 LOG_INDEX_BUILDS 配置参数在数据库服务器启动时启用或禁用索引页日志记录。通过运行 onmode -wf LOG_INDEX_BUILDS=1(启用)或 0(禁用)可更改 onconfig 文件中 LOG_INDEX_BUILDS 的值。
当 RHAC 辅助服务器存在于高可用性环境中时,必须启用索引页日志记录。
查看索引页日志记录统计信息
可以使用 onstat 实用程序或系统监视接口 (SMI) 表来查看是启用还是禁用了索引页日志记录。统计信息也显示启用或禁用索引页日志记录的日期和时间。
要查看索引页日志记录统计信息,请使用 onstat -g ipl 命令,或查询 sysipl表。
有关 onstat -g ipl 输出的示例,请参阅《GBase 8s 管理员参考》中有关 onstat 实用程序的信息。
服务器多路复用器组 (SMX) 连接
服务器多路复用器组 (SMX) 是支持高可用性环境中各服务器之间的加密多路复用网络连接的通信接口。SMX 提供数据库服务器实例之间的可靠、安全和高性能通信机制。
启用 SMX 加密
使用 ENCRYPT_SMX 配置参数设置高可用性配置的加密级别。如果将 ENCRYPT_SMX 参数设置为 1,那么仅当连接的数据库服务器也支持加密时才对 SMX 事务使用加密。如果将 ENCRYPT_SMX 配置参数设置为 2,那么仅允许到加密数据库服务器的连接。将 ENCRYPT_SMX 设置为 0 将禁用服务器之间的加密。
获取 SMX 统计信息
可以使用 onstat 实用程序或系统监视接口 (SMI) 表来查看 SMX 连接统计信息或 SMX 会话统计信息。
要查看 SMX 连接统计信息,请使用 onstat -g smx 命令。
要查看 SMX 会话统计信息,请使用 onstat -g smx ses 命令。
有关 onstat -g smx 和 onstat -g smx ses 输出的示例,请参阅《GBase 8s 管理员参考》中有关 onstat 实用程序的信息。
首次启动 RHAC 辅助服务器
在完成 RHAC 辅助服务器的硬件配置后,就可以随时启动 RHAC 辅助服务器,并将其连接到主服务器。
假设您想要启动主服务器和 RHAC 辅助服务器(ServerA 和 ServerB)。在以下步骤中描述了启动服务器的过程(使用 ServerA 作为主数据库服务器并使用 ServerB 作为 RHAC 辅助数据库服务器)。上表列出了执行每一步骤所需的命令。
该过程要求对主服务器进行备份,然后将备份复原到辅助服务器上。您可以使用 ontape 或 ON-Bar 执行备份与复原。您必须在整个过程中使用相同的实用程序。
即使使用 ON-Bar 执行备份与复原,两个数据库服务器上仍然需要 ontape 实用程序来执行备份和应用逻辑日志。不要从参与 HAC 集群环境的数据库服务器除去 ontape 实用程序。
您还可以使用用于外部备份与复原的标准 ON-Bar 或 ontape 命令来设置 RHAC 辅助服务器。
要启动带有 RHAC 辅助服务器的主服务器,请执行以下操作:
-
在两个数据库服务器上均安装用户定义的类型和用户定义的例程,然后仅在 ServerA 上注册它们。
有关如何安装用户定义的类型或用户定义的例程的信息,请参阅 《GBase 8s 用户定义的例程与数据类型开发者指南》。
-
激活主服务器上的索引页日志记录。
-
记录主服务器上 RHAC 辅助服务器的身份。 首次建立主服务器和 RHAC 辅助服务器之间的连接时,可选密码在这两者之间提供认证。
-
创建 ServerA 的 0 级备份。
-
从您在步骤 4 中创建的 0 级备份执行对 ServerB 的物理复原。不要执行逻辑复原。
使用适当的命令:
使用 onbar -r -p 命令来执行物理复原。
使用 onbar -r -p -e 命令来执行物理外部复原。
使用 ontape -p 选项。(不要使用 ontape -r 选项,因为它同时执行物理复原和逻辑复原。)
使用 ontape -p -e 命令来执行物理外部复原。
-
使用 onmode -d RSS ServerA password 命令可将 ServerB 的类型设置为 RHAC 辅助服务器,并指示相关联的主数据库服务器。
ServerB 尝试建立与主数据库服务器 (ServerA) 的连接,并启动操作。必须成功建立连接。
辅助数据库服务器使用自步骤 4 以来写入主数据库服务器的逻辑日志记录来执行逻辑恢复。如果所有这些逻辑日志记录仍然位于主数据库服务器磁盘上,那么主数据库服务器将通过网络将这些记录直接发送到 RHAC 辅助服务器,然后自动执行逻辑恢复。
-
如果您已备份并释放主数据库服务器上的逻辑日志文件,那么这些文件中的记录不再在磁盘上。 辅助数据库服务器会提示您从磁带恢复这些文件。在这种情况下,您必须执行步骤 7。
重要在同一会话期间,必须完成步骤 5 到 6。如果必须在步骤 5 后关闭并重新启动辅助数据库服务器,那么必须重新执行步骤 5。
如果写入主数据库服务器的逻辑日志记录不再在主磁盘上,那么辅助数据库服务器会提示您从磁带备份恢复这些文件。
如果辅助数据库服务器必须通过网络读取备份逻辑日志文件,那么将辅助数据库服务器上的磁带设备参数设置为正在运行主数据库服务器的计算机上的设备或设置为与主数据库服务器处于相同位置的设备。
在您恢复磁带上的所有逻辑日志文件后,逻辑复原将完成使用主数据库服务器磁盘上的逻辑日志文件。
表 1. 首次启动带有 RHAC 辅助服务器的主服务器的步骤
步骤 | 在主服务器上 | 在 RHAC 辅助服务器上 |
---|---|---|
1. | 安装 UDR、UDT。 注册 UDR、UDT模块。 | 安装 UDR、UDT模块。 |
2. | onmode 命令 onmode -wf LOG_INDEX_BUILDS=1 | |
3. | onmode 命令 onmode -d add RSS rss_servername password | |
4. | ontape 命令 ontape -s -L 0 ON-Bar 命令 onbar -b -L 0 | |
5. | ontape 命令 ontape -p 或 ontape -p -e 当提示您备份日志时回答否。 ON-Bar 命令 onbar -r -p 或 onbar -r -p -e | |
6. | onmode 命令 onmode -d RSS primary_servername password 如果自步骤 1 以来写入主数据库服务器的所有逻辑日志记录仍位于主数据库服务器磁盘上,那么辅助数据库服务器将读取这些记录以执行逻辑恢复。(否则,必须执行步骤 8)。 | |
7. | ontape 命令 ontape -l ON-Bar 命令 onbar -r -l 仅当辅助数据库服务器提示您从磁带备份恢复逻辑日志文件时,才需要执行此步骤。 |
通过备用备份方法来减少设置时间
通过使用 ontape STDIO 功能,可显著提升设置辅助服务器的速度。请参阅使用 ontape STDIO 功能来减少设置时间以获取更多信息。
请参阅《GBase 8s 备份与复原指南》以获取有关使用 STDIO 值的详细信息。
将脱机主服务器转换为 RHAC 辅助服务器
在执行主服务器到 RHAC 辅助服务器的计划或意外故障转移后,可以将旧的主服务器转换为 RHAC 辅助服务器。
例如,假设您有一个名为 srv1 的主服务器,此服务器已故障转移到名为 srv2 的 RHAC 辅助服务器。 以下步骤显示了如何将旧的主服务器转换为 RHAC 辅助服务器。
-
在新的主服务器 (srv2) 上,将旧的主服务器 (srv1) 注册为 RHAC 辅助服务器。
onmode -d add RSS srv1
-
如果要将旧的主服务器转换为 RHAC 辅助服务器,但该服务器处于脱机状态,那么请使用下面所示的备份和复原命令初始化该服务器:。或者,也可以通过运行以下命令来初始化旧的主服务器:
oninit -PHY
请参阅《GBase 8s 管理员参考》中的 oninit 实用程序以获取更多信息。
-
使用以下命令将服务器转换为 RHAC 辅助服务器:
onmode -d RSS srv2
延迟应用日志记录
要在灾难恢复场景中进行协助,可以将 RHAC 辅助服务器配置为先等待指定的时间段,然后应用从主服务器接收的日志。
通过延迟日志文件的应用,可从 RHAC 辅助服务器复原数据库来迅速地从错误的数据库修改中恢复。也可在指定时间停止 RHAC 辅助服务器上的日志应用。
例如,假设数据库管理员希望根据行的存在时间从表中删除特定行。表中的每行包含一个时间戳记,指示该行的创建时间。如果数据库管理员不慎将过滤器设置为错误日期,删除的行可能超出意愿。通过延迟日志文件的应用,这些行仍将保留在 RHAC 辅助服务器中。 然后,数据库管理员可以从辅助服务器抽取这些行,并将其插入到主服务器。
现在假设需要数据库管理员通过重命名表来对模式执行更改,但是数据库管理员输入了错误的命令并删除了表 orders,而不是将表名更改为 store_orders。 如果配置了 RHAC 辅助服务器以延迟日志的应用,那么数据库管理员可从辅助服务器恢复 orders 表。
配置了日志文件延迟应用时,达到指定时间段之前,将不应用从主服务器发送的事务。从主服务器接收的日志文件将在 RHAC 辅助服务器上的指定安全目录中登台,然后在指定时间段之后应用。延迟应用日志文件的方法有两种:
- 在指定时间间隔之后应用登台的日志文件
- 在指定时间停止应用日志文件
可通过在 RHAC 辅助服务器的 onconfig 文件中设置配置参数来启用日志文件的延迟应用。启用日志文件延迟应用之前,必须通过设置 LOG_STAGING_DIR 配置参数来指定日志文件的登台目录。指定 LOG_STAGING_DIR 配置参数之后,可通过编辑 onconfig 文件或动态使用 onmode -wf 命令来配置 DELAY_APPLY 或 STOP_APPLY 配置参数。
日志记录的存储位置
服务器将在 LOG_STAGING_DIR 指定的目录内额外创建名为 ifmxlog_## 的目录,其中 ## 是 SERVERNUM 指定的实例。这些目录用于存储逻辑日志,也在恢复 RHAC 辅助服务器期间使用。如果必须恢复 RHAC 辅助服务器,而主服务器上已经包装了日志,那么可使用 ifmxlog_## 中的日志来恢复该服务器。ifmxlog_## 内的文件在不再需要时将清除。
延迟触发的条件
BEGIN WORK、COMMIT WORK 和 ROLLBACK WORK 日志记录中的时间值用于计算延迟或停止应用日志文件的时间。将日志页传递到恢复进程之前,将计算这些时间值。
如果发出 BEGIN WORK 语句,事务执行第一个更新活动之前,将不写入 BEGIN WORK 日志记录;因此,发出 BEGIN WORK 语句的时间与写入 BEGIN WORK 日志的时间之间可能存在延迟。
与辅助服务器更新交互
必须注意辅助服务器更新与日志文件延迟应用之间的交互。如果启用了更新,并且更新了辅助服务器,那么达到 DELAY_APPLY 指定的时间量之前,将不应用更新。但是,禁用辅助服务器更新也将禁用“已落实读取”,从而保证检索行时,在表中落实检索到的每个行。
要保留“已落实读取”隔离级别,请考虑使用 UPDATABLE_SECONDARY 配置参数启用辅助服务器更新,但是从连接管理器服务级别协议列表中除去用于延迟应用日志文件的 RHAC 辅助服务器。也可以考虑将 RHAC 辅助服务器移动到新 SLA。
有关更多信息,请参阅辅助服务器上的数据库更新和《GBase 8s 管理员参考》。
指定日志登台目录
配置日志登台目录,以指定 RHAC 辅助服务器上的日志文件在应用于数据库之前,在何处登台。
启用日志文件延迟应用之前,必须为从主服务器发送的日志文件指定登台目录。未定义任何缺省登台目录。服务器将在 LOG_STAGING_DIR 指定的目录内额外创建名为 ifmxlog_## 的目录,其中 ## 是 SERVERNUM 指定的实例。这些目录用于存储逻辑日志,也在恢复 RHAC 辅助服务器期间使用。登台日志文件在不再需要时将自动除去。如果丢失了 LOG_STAGING_DIR 内的文件,而主服务器覆盖了日志,那么必须重建 RHAC 辅助服务器。
必须确保 LOG_STAGING_DIR 指定的目录存在,且该目录是安全目录。该目录的所有者必须是用户 gbasedbt,必须属于组 gbasedbt,并且不得具有公共读、写或执行许可权。如果启用了角色隔离,那么 LOG_STAGING_DIR 指定的目录必须属于拥有 $GBASEDBTDIR/etc 的用户或组。如果 LOG_STAGING_DIR 指定的目录不是安全目录,那么不能初始化该服务器。 如果该目录不是安全目录,将在联机消息日志中写入以下消息:
日志登台目录 (directory_name) 不安全。
还必须确保磁盘包含的空间足以容纳主服务器中的所有日志,并且目录中不包含来自不再使用的早期实例的登台日志。
有关更多信息,请参阅《GBase 8s 管理员参考》。
要设置 LOG_STAGING_DIR,请执行以下操作:
- 确保要用于存储日志的目录存在,且该目录是安全目录。
- 编辑 RHAC 辅助服务器的 onconfig 文件。
- 按照下面的方式指定登台目录:LOG_STAGING_DIR directory_name,其中,directory_name 是要用于存储日志的目录的名称。
- 重新启动服务器。
也可通过使用 onmode -wf 命令,在不重新启动服务器的情况下设置 LOG_STAGING_DIR 配置参数;但是,运行该命令时,日志文件的延迟应用不得处于活动状态。
延迟应用 RHAC 辅助服务器上的日志记录可在 RHAC 辅助服务器上延迟应用日志记录,以准备灾难恢复方案。
可通过设置 DELAY_APPLY 配置参数来启用日志文件的延迟应用。可手动编辑 onconfig 文件并重新启动服务器,也可使用 onmode -wf 命令动态更改该值。设置 DELAY_APPLY 的值时,还必须设置 LOG_STAGING_DIR。如果配置了 DELAY_APPLY,但未将 LOG_STAGING_DIR 设置为有效的安全目录,那么就不能初始化服务器。
请同时使用数目和修饰符来设置 DELAY_APPLY。数目最多可包含 3 个数字,用于指示修饰符单位的数量。 修饰符是以下项之一:
- D(或 d),代表天
- H(或 h),代表小时
- M(或 m),代表分钟
- S(或 s),代表秒
有关更多信息,请参阅《GBase 8s 管理员参考》。
要在 RHAC 辅助服务器上延迟应用日志文件 4 个小时,请运行以下命令:
onmode –wf DELAY_APPLY=4H
要延迟应用日志文件 1 天,请运行以下命令:
onmode -wf DELAY_APPLY=1D
要禁用日志文件的延迟应用,请运行以下命令:
onmode –wf DELAY_APPLY=0
停止应用日志记录
可在 RHAC 辅助服务器上停止应用日志记录,以准备灾难恢复方案。
可通过设置 STOP_APPLY 配置参数来停止在 RHAC 辅助服务器上应用日志文件。可手动编辑 onconfig 文件并重新启动服务器,也可使用 onmode -wf 命令动态更改该值。设置 STOP_APPLY 的值时,还必须设置 LOG_STAGING_DIR。如果配置了 STOP_APPLY,但未将 LOG_STAGING_DIR 设置为有效的安全目录,那么就不能初始化服务器。
有关更多信息,请参阅《GBase 8s 管理员参考》。
要立即在 RHAC 辅助服务器上停止应用日志文件,请运行以下命令:
onmode –wf STOP_APPLY=1
要在 2009 年 4 月 15 日晚上 11 点停止应用日志文件,请运行以下命令:
onmode –wf STOP_APPLY="2009:04:15-23:00:00"
恢复正常应用日志文件
onmode –wf STOP_APPLY=0
共享磁盘辅助服务器
这些主题概述了在高可用性环境中设置和配置 SSC(共享磁盘)辅助服务器。SSC 辅助服务器选项可用于标准版 GBase 8s。
SSC 辅助服务器
共享磁盘 (SSC) 辅助服务器参与了高可用性集群配置。 在这样的配置中,主服务器和 SSC 辅助服务器共享同一个磁盘或磁盘阵列。
SSC 辅助服务器不在自己的磁盘空间上保存物理数据库副本。而是与主服务器共享磁盘。
必须将 SSC 辅助服务器配置为访问允许并行访问的共享磁盘设备。不要配置使用操作系统缓冲(如 NFS 交叉安装的文件系统)的 SSC 辅助服务器。如果 SSC 辅助服务器实例和主服务器实例位于一台机器上,那么这两台服务器都可访问本地磁盘。如果 SSC 辅助服务器和主服务器位于不同的物理机器上,那么必须这两台服务器必须都配置为访问显示为本地连接的共享磁盘设备,如 Veritas 或 GPFS™。
SSC 辅助服务器可与 HAC 辅助服务器、RHAC 辅助服务器和 Enterprise Replication 结合使用。
可以非常快速地将 SSC 辅助服务器添加到高可用性环境,因为它们不需要单独的磁盘副本。因为 SSC 服务器共享主服务器的磁盘存储资源,所以建议您提供一些其他磁盘备份方法,例如磁盘镜像,或者使用 RHAC 辅助服务器或 HAC 辅助服务器。
以下限制影响属于共享磁盘辅助服务器的数据库服务器实例的提升:
- SSC 辅助服务器不能提升为 RHAC 辅助服务器。
- SSC 辅助服务器不能提升为可存在于主要高可用性环境之外的标准服务器。
SSC 辅助服务器的磁盘需求
除了磁盘需求(与主服务器共享)之外,硬件和软件需求通常与 HAC 辅助服务器的需求相同(请参阅针对特定受支持平台的机器说明®)。 此外,具有数据库服务器的计算机之间必须共享主磁盘系统。这表示从 SSC 辅助服务器到数据库空间的路径必须与主服务器的数据库空间路径相同。请参阅配置集群。
设置共享磁盘辅助服务器
设置共享磁盘辅助服务器要先设置 SDS_ENABLE 配置参数。 接下来,将使用 onmode 实用程序来设置 SSC 辅助服务器用于连接到主服务器的主服务器别名。然后,修改 SSC 辅助服务器上的配置文件以包含相应选项。最后,运行 oninit 实用程序以启动 SSC 辅助服务器。
-
在主服务器上,设置 onconfig 文件中的 SDS_TIMEOUT 配置参数:
SDS_TIMEOUT x
SDS_TIMEOUT 指定主服务器将等待从 SSC 辅助服务器发送的日志位置确认的时间量(以秒为单位)。有关 SDS_TIMEOUT 配置参数的信息,请参阅 《GBase 8s 管理员参考》。
-
在主服务器上,配置 SSC 主服务器的别名:
onmode -d set SDS primary <alias>
由
指定的服务器名称将成为共享磁盘环境的主服务器和 SSC 辅助服务器的日志源。 -
在 SSC 辅助服务器上,设置配置文件中的以下配置参数:
SDS_ENABLE 1
SDS_PAGING <path 1>,<path 2>
SDS_TEMPDBS <dbsname>,<dbspath>,<pagesize>,<offset>,<size>SDS_ENABLE 在辅助服务器上必须设置为 1(启用)以便支持对共享磁盘环境。 SDS_PAGING 指定两个文件的路径,这两个文件用于保存检查点之间可能需要清空的页。 每个文件都作为任意页大小块的临时磁盘存储器。 SDS_TEMPDBS 用于定义 SSC 辅助服务器使用的临时数据库空间。 此数据库空间在启动服务器时会动态创建(不是通过运行 onspaces 而创建)。 请参阅《GBase 8s 管理员参考》以获取有关这些参数的其他信息。
-
在 SSC 辅助服务器上,设置以下配置参数以与主服务器上的那些参数匹配:
- ROOTNAME
- ROOTPATH
- ROOTOFFSET
- ROOTSIZE
- PHYSFILE
- LOGFILES
- LOGSIZE
映射其他配置参数以使主服务器的那些参数与 DBSERVERALIASES、DBSERVERNAME 和 SERVERNUM 的异常匹配。
对于高可用性集群中的 HAC、RHAC 和 SSC 辅助服务器,必须通过将 TEMPTAB_NOLOG 配置参数设置为 1 来始终禁用对临时表的逻辑日志记录。
-
在 SSC 辅助服务器上,如果要启用客户机应用程序以在辅助服务器上执行更新,插入和删除操作,可以选择将 UPDATABLE_SECONDARY 配置参数设置为正整数。
-
向主服务器的 sqlhosts 文件添加条目:
primary_dbservername nettype primary_hostname servicename
-
使用 oninit 命令启动 SSC 辅助服务器。
在主服务器处于活动状态之后才能启动 SSC 辅助服务器。
辅助服务器启动时,必须首先使用快速恢复方式处理任何已打开的事务。仅当启动检查点时打开的所有事务均落实或回滚之后,客户机应用程序才可连接到服务器。处理了打开的事务之后,客户机应用程序可正常连接到服务器。必须检查辅助服务器上的 online.log 文件,以验证是否已完成处理打开的事务。
下表说明了前面的步骤,这样您可以清楚地确定在主服务器上执行的步骤和在辅助服务器上执行的步骤。
表 1. 首次启动 SSC 辅助服务器的步骤
步骤 | 在主服务器上 | 在辅助服务器上 |
---|---|---|
1. | 设置 onconfig 文件中的 SDS_TIMEOUT 配置参数: SDS_TIMEOUT x | |
2. | 配置 SSC 主服务器的别名: onmode -d set SDS primary | |
3 | 设置配置参数: SDS_ENABLE 1 SDS_PAGING <path 1>,<path 2> SDS_TEMPDBS <dbsname>,<dbspath>, <pagesize>,<offset>, <size> | |
4 | 设置配置参数以便与主服务器上的那些参数匹配: ● ROOTNAME ● ROOTPATH ● ROOTOFFSET ● ROOTSIZE ● PHYSFILE ● LOGFILES ● LOGSIZE | |
5 | (可选)将 UPDATABLE_SECONDARY 配置参数设置为正整数。 | |
6 | 向主服务器的 sqlhosts 文件添加条目: dbservername nettype hostname servicename | |
7 | 启动 SSC 辅助服务器 oninit |
添加辅助服务器时,LGR 内存池中的内存使用量将增加。
请参阅《GBase 8s 管理员参考》 以获取有关配置参数的信息。
获取 SSC 辅助服务器统计信息
使用 onstat 实用程序或系统监视接口 (SMI) 表来查看 SSC 辅助服务器统计信息。
使用 onstat -g sds 来查看 SSC 辅助服务器统计信息。 onstat 实用程序的输出取决于实用程序是在主服务器还是在辅助服务器上运行。
查询 syssrcsds 表可获取有关主服务器上共享磁盘统计信息的信息。
查询 systrgsds 表可获取有关辅助服务器上共享磁盘统计信息的信息。
有关 onstat 和 SMI 表的信息,请参阅《GBase 8s 管理员参考》。
SSC 辅助服务器配置
将 SSC 辅助服务器升级为主服务器
通过在 SSC 辅助服务器上发出以下命令,将 SSC 辅助服务器转换为主服务器:
onmode -d set SDS primary <alias>
SSC 辅助服务器不能转换为标准服务器。
将主服务器转换为标准服务器
通过在主服务器上使用下列命令,可以将主服务器转换为标准服务器,并断开与共享磁盘环境的连接。
onmode -d clear SDS primary <alias>
SSC 辅助服务器安全性
SSC 辅助服务器支持与 HAC 类似的加密规则。请参阅集群的数据库服务器配置需求以获取详细信息。
可启用或禁用任何主服务器和辅助服务器对之间的加密。 即,可以加密主服务器与某台 SSC 辅助服务器之间的流量,而对主服务器与其他 SSC 辅助服务器之间的流量不进行加密。
有关设置和配置主服务器与 SSC 辅助服务器之间加密的其他信息,请参阅服务器多路复用器组 (SMX) 连接主题。
集群管理
本章描述用于监视和维护集群的各种管理任务(其中部分可选)。例如,用于优化性能的负载均衡,以及确保安全性。
数据复制的工作原理
这些主题描述了数据库服务器用于对辅助服务器执行数据复制的机制。有关如何设置、启动和管理各种辅助服务器的指示信息,请参阅下表。
表 1. 辅助服务器设置信息
辅助服务器类型 | 相关指南 |
HAC 辅助服务器 | 请参阅高可用性集群配置,有关使用外部备份与复原启动 HAC 对的信息,请参阅《GBase 8s 备份与复原指南》。 |
RHAC 辅助服务器 | 请参阅远程独立辅助服务器。 |
SSC 辅助服务器 | 请参阅共享磁盘辅助服务器 |
数据初始复制的工作原理
HAC 辅助服务器和 RHAC 辅助服务器使用存储空间备份和逻辑日志备份(备份至磁带的和磁盘上的均包括在内)执行从主数据库服务器到辅助数据库服务器的数据初始复制。
SSC 辅助服务器不需要来自主服务器的备份与复原,因为 SSC 辅助服务器与主服务器共享同一磁盘。
要复制数据,请执行以下操作:
- 在两个数据库服务器上均安装用户定义的类型和用户定义的例程。
- 仅在主数据库服务器上注册用户定义的类型和用户定义的例程。
- 要使两个数据库服务器管理的数据同步,请在主数据库服务器上创建所有存储空间的 0 级备份。
- 复原数据复制对中辅助数据库服务器上备份的所有存储空间。
然后,最近步中从存储空间备份复原的辅助数据库服务器从主数据库服务器读取自该备份以来所生成的所有逻辑日志记录。
数据库服务器首先从所有不再在磁盘上的备份逻辑日志文件读取逻辑日志记录,然后从所有在磁盘上的逻辑日志文件读取。
有关复制数据的详细信息,请参阅首次启动 HAC。《GBase 8s 备份与复原指南》说明了如何使用 ON-Bar 启动复制。
您必须对存储空间备份执行初始备份。您无法使用诸如 onload 和 onunload 之类的数据迁移实用程序来复制数据,因为每个数据库服务器上的物理页布局必须相同,以便数据复制工作。
主服务器数据到辅助服务器的复制
所有辅助服务器类型都使用日志来复制主服务器复制数据。主服务器将其整个逻辑日志发送至 HAC 和 RHAC 辅助服务器,但仅将日志页面的位置发送至 SSC 辅助服务器。
索引页面日志记录可供所有辅助服务器使用,但对于到 RHAC 辅助服务器的复制而言是必需的。
数据库必须使用事务日志记录才能进行复制。
到 HAC 辅助服务器的复制
主数据库服务器可使用三种同步方式将数据复制到 HAC 辅助服务器:
完全同步方式,其中事务需要 HAC 辅助服务器上的完成确认,然后才能完成。
在您使用完全同步方式时,数据完整性最高,但是如果客户机应用程序使用无缓冲日志记录并且有许多小事务,那么系统性能可能会受到负面影响。
-
完全同步方式,其中事务需要 HAC 辅助服务器上的完成确认,然后才能完成。
在您使用完全同步方式时,数据完整性最高,但是如果客户机应用程序使用无缓冲日志记录并且有许多小事务,那么系统性能可能会受到负面影响。
-
异步方式,其中事务无需 HAC 辅助服务器上的已接收或已完成确认即可完成。
在使用异步方式时,系统性能最佳,但是如果发生服务器故障,那么数据可能丢失。
-
接近同步方式,其中事务需要 HAC 辅助服务器上的已接收确认,然后才能完成。
接近同步方式可提供比完全同步方式更优异的性能,比异步方式更优异的数据完整性。如果用于无缓冲日志记录,那么 SYNC 方式(在 DRINTERVAL 设置为 -1 时开启)与接近同步方式相同。
同步方式由 DRINTERVAL 配置参数值、HDR_TXN_SCOPE 配置参数值和数据库日志记录类型的组合进行控制。
以下两张图演示了从主服务器至 HAC 辅助服务器的复制。
图: 从主服务器至 HAC 辅助服务器的数据复制方式
图: 管理数据复制的线程
主服务器的逻辑日志缓冲区的内容将复制到共享内存的数据复制缓冲区并清空到磁盘。如果主服务器使用的是完全同步或接近同步方式,那么它必须接收到来自 HAC 辅助服务器的确认,然后才能完成逻辑日志清空。 主服务器启动 drprsend 线程以将数据复制缓冲区通过网络传输到辅助服务器的 drsecrcv 线程,然后该线程会将数据写入共享内存的接收缓冲区。drsecapply 线程将接收缓冲区复制到恢复缓冲区。HAC 和 RHAC 辅助服务器都使用 logrecvr 线程来为逻辑日志记录应用其数据库空间。您可以通过更改 OFF_RECVRY_THREADS 配置参数的值来调整 logrecvr 线程的数量。
drprping和 drsecping线程发送并接收消息以监视两个服务器之间的连接。
到 RHAC 辅助服务器的复制
因为主服务器和 RHAC 辅助服务器之间的检查点是异步的,因此 RHAC 辅助服务器需要索引页面日志记录。
下图演示了从主服务器至 RHAC 复制服务器的复制。
图: 管理 RHAC 辅助服务器的数据复制的线程
如果主服务器可以验证其已连接到 RHAC 辅助服务器,那么 RSS_send 线程将页面从磁盘或逻辑日志缓冲区复制到数据复制缓冲区。RSS_Send 线程使用“服务器多路复用器组”(SMX) 连接以将数据复制缓冲区发送至 RHAC 辅助服务器的 RSS_recv线程。然后,RSS_recv 线程将数据写入接收缓冲区。RSS_apply 线程将接收缓冲区复制到恢复缓冲区。
不同于 HAC 完全同步方式或接近同步方式,主服务器在发送下一个缓冲区之前不需要来自辅助服务器的确认。在 RSS_send 线程等待RSS_Recv 线程接收来自 RHAC 辅助服务器的确认之前,主服务器最多发送 32 个未确认的数据复制缓冲区。
到 SSC 辅助服务器的复制
SSC 辅助服务器从磁盘读取逻辑日志页,然后将数据应用于其内存数据缓冲区。
HAC 复制的完全同步方式
HAC 完全同步方式确保主服务器上已落实的任何事务也在 HAC 辅助服务器上落实,这可以在发生故障时保护事务一致性。
主数据库服务器将逻辑日志缓冲区内容写入 HAC 缓冲区后,会将缓冲区中的记录发送至 HAC 辅助数据库服务器。仅当主数据库服务器接收到来自 HAC 辅助数据库服务器的确认(已收到记录)之后,主数据库服务器上的逻辑日志缓冲区清空才会完成。
为跟踪同步,主服务器和 HAC 辅助服务器都在其保留的页面中存储以下信息:
- 包含最近完成的检查点的逻辑日志文件的标识
- 逻辑日志文件中检查点记录的位置
- 上次发送或接收的逻辑日志文件的标识
- 上次发送或接收的逻辑日志记录的页码
要查看此信息,请运行 onstat -g dri ckpt 命令。
HAC 复制对中的数据库服务器之间的检查点是同步的。主服务器会等待 HAC 辅助服务器确认收到了检查点日志记录后,再完成其检查点。如果检查点未在 DRTIMEOUT 配置参数指定的时间内完成,那么主数据库服务器假定发生了故障。
HAC 完全同步方式具有以下需求:
- 主服务器和 HAC 辅助服务器上的 DRINTERVAL 配置参数必须设置为 0。
- 主服务器和 HAC 辅助服务器上的 DRTIMEOUT 配置参数必须设置为相同值。
如果主服务器和 HAC 辅助服务器上的操作系统时间是同步的,那么管理可以更轻松。
要开启完全同步数据复制,请将 DRINTERVAL 配置参数设置为 0,然后使用以下某种方法:
- 将 HDR_TXN_SCOPE 配置参数设置为 FULL_SYNC。
- 运行 SET ENVIRONMENT HDR_TXN_SCOPE 'FULL_SYNC';
日志记录将按照其接收顺序进行应用。在日志传输缓冲区包含许多日志记录时,在 HAC 辅助服务器上应用这些日志记录将需要更多时间,并且性能可能受到负面影响。如果发生此情况,请考虑将接近同步方式用于 HAC 数据复制。
HAC 复制的接近同步方式
在使用 HAC 复制的接近同步方式时,主服务器在收到有关 HAC 辅助服务器已接收所传输事务的确认后,将逻辑日志缓冲区清空至磁盘。主服务器不会等待有关在 HAC 辅助服务器上已落实事务的确认。
在日志传输缓冲区包含许多日志记录时,在 HAC 辅助服务器上应用这些日志记录将需要更多时间。HAC 复制的接近同步方式提供比完全同步方式更优异的性能,比异步方式更优异的数据完整性。
主服务器在其保留的页面中存储以下接近同步信息:
- 已排队至 drprsend 线程的未处理数据复制缓冲区的数量。
- 日志唯一值,最近分页的日志的页码。
- 线程控制块 (TCB) 的指针、带括号的线程标识以及该线程已执行的落实的日志序号 (LSN)。
- 等待 HAC 辅助服务器上“已接收”确认的落实的 LSN。
要查看此信息,请运行 onstat -g dri que 命令。
复制对中的数据库服务器间的检查点是同步的。主服务器会等待 HAC 辅助服务器确认收到了检查点日志记录后,再完成其检查点。如果检查点未在 DRTIMEOUT 配置参数指定的时间内完成,那么主数据库服务器假定发生了故障。
HAC 接近同步方式具有以下需求:
- 主服务器和 HAC 辅助服务器上的 DRINTERVAL 配置参数必须设置为 -1,或者主服务器上的 DRINTERVAL 配置参数必须设置为 0。
- 主服务器和 HAC 辅助服务器上的 DRTIMEOUT 配置参数必须设置为相同值。
- 主服务器和 HAC 辅助服务器上的操作系统时间必须是同步的。
要开启接近同步数据复制,请将 DRINTERVAL 配置参数设置为 0,然后使用以下某种方法:
- 将 HDR_TXN_SCOPE 配置参数设置为 NEAR_SYNC。
- 运行 SET ENVIRONMENT HDR_TXN_SCOPE 'NEAR_SYNC';
HAC 复制的异步方式
异步 HAC 复制意味着主服务器不等待来自 HAC 辅助服务器的响应,就将逻辑日志清空至磁盘。异步 HAC 复制可提高复制速度,但可能会丢失事务。
可通过多种方式开启 HAC 复制的异步方式:
- 将 DRINTERVAL 配置参数设置为正整数值。
- 将 DRINTERVAL 配置参数设置为 0,并将 HDR_TXN_SCOPE 配置参数设置为 ASYNC。
- 运行以下语句:
SET ENVIRONMENT HDR_TXN_SCOPE 'ASYNC';
在异步方式中,主数据库服务器在将逻辑日志缓冲区的内容复制到数据复制缓冲区后,将逻辑日志清空至磁盘。在发生以下某个条件时,主数据库服务器将通过网络发送 HAC 缓冲区的内容:
- HAC 缓冲区变满。
- 自记录发送至 HAC 辅助数据库服务器以来的时间间隔超出主服务器的 DRINTERVAL 配置参数值。
要降低使用异步复制的集群中丢失事务的风险,请为所有数据库使用无缓冲日志记录。 无缓冲日志记录缩短了事务记录等待和传输之间的时间量。如果主服务器使用缓冲日志记录,并且您收到 error -7350 Attempt to update a stale version of a row 消息,那么请切换至无缓冲日志记录。
如果发生故障转移,但是主服务器重新启动后带有数据复制,那么主服务器上已落实但辅助服务器上未落实的事务将存储在 DRLOSTFOUND 配置参数指定的文件中。
失而复得的事务
使用异步更新时,在主数据库服务器上落实的事务可能未在辅助数据库服务器上复制。如果在主数据库服务器将落实记录复制到 HAC 缓冲区之后但在主数据库服务器将该落实记录发送至辅助数据库服务器之前发生故障,就会产生这种情况。
如果在主数据库服务器故障后将辅助数据库服务器更改为标准数据库服务器,它会回滚所有打开的事务。这些事务包括任何在主数据库服务器上落实但辅助数据库服务器未接收到其落实记录的事务。因此,事务在主数据库服务器上但未在辅助数据库服务器上落实。当您在故障后重新启动数据复制,那么数据库服务器在主数据库服务器的逻辑恢复期间将丢失的事务中的所有逻辑日志记录放置在某文件(DRLOSTFOUND 配置参数指定)中。下图说明了该过程。
图: 使用失而复得的文件
如果在重新启动数据复制后的运行主数据库服务器的计算机上创建不失而复得的文件,那么表示已丢失事务。数据库服务器无法重新应用失而复得文件中的事务记录,因为在辅助数据库服务器充当标准数据库服务器时可能发生了有冲突的更新。
为了减少不用同步方式运行数据复制而丢失事务的风险,请为所有数据库使用未缓冲日志记录。该方法减少了从主数据库服务器到辅助数据库服务器的写入和事务记录传送之间所需的时间量。
数据复制配置示例
这些主题描述了如何配置数据复制环境的一些示例。
远程独立辅助配置示例
下图说明了由多个 RHAC 辅助服务器组成的配置的示例。当主服务器距离 RHAC 辅助服务器很远或主服务器和 RHAC 辅助服务器之间的网络速度较慢或不稳定时,该配置可能有用。因为 RHAC 辅助服务器使用全双工通信协议,而且不需要同步检查点处理,因此主服务器的性能通常不受影响。
图: 具有三台 RHAC 辅助服务器的主服务器
下一幅图显示了配置 RHAC 辅助服务器以及 HAC 辅助服务器的示例。 在该示例中,如果主服务器和 HAC 辅助服务器均丢失,那么 HAC 辅助服务器提供高可用性,而 RHAC 辅助服务器提供额外的灾难恢复功能。 RHAC 辅助服务器在地理位置上可距离主服务器和 HAC 辅助服务器很远,因此区域性的破坏(如地震或洪水)不会对 RHAC 辅助服务器造成影响。
图: 具有 HAC 辅助服务器和 RHAC 辅助服务器的主服务器
如果主数据库服务器发生故障,那么可将现有 HAC 辅助服务器转换为主服务器,如下图中所示:
图: 从主服务器故障转移到 HAC 辅助服务器
如果原始主服务器将处于脱机状态的时间过长,那么可将 RHAC 辅助服务器转换为 HAC 辅助服务器。当原始主服务器恢复为在线状态时,再将其配置为 RHAC 辅助服务器,如下图所示:
图: 充当 HAC 辅助服务器角色的 RHAC 辅助服务器
共享磁盘辅助配置示例
下图显示了带有两台 SSC 辅助服务器的主服务器的示例。在这种情况下,主服务器的角色可以转换为两台 SSC 辅助服务器中的任意一个。无论是因为计划的中断还是因为主服务器故障而导致主服务器必须停止服务均是如此。
图: 配置有两台 SSC 辅助服务器的主服务器
因为两台 SSC 辅助服务器都是从同一磁盘子系统进行读取,因此它们都同样能充当主服务器角色。下图说明了主服务器处于脱机状态的情境。
图: 充当主服务角色的 SSC 辅助服务器
有多种方法来防止共享磁盘发生硬件故障。可能最普通的方法就是基于 RAID 技术(例如 RAID-5)配置磁盘阵列。防止磁盘故障的另一种方法是使用 SAN(存储区域技术)来包含远程磁盘镜像的某些格式。因为 SAN 磁盘可位于距离主磁盘及其镜像较近的位置,因此这可为服务器或磁盘子系统的计划中断和意外中断提供高度可用性。下图描述了这样的配置:
图: 具有镜像磁盘的主服务器和 SSC 辅助服务器
如果发生磁盘故障,那么可按下图中的描述重新配置服务器:
图: 主共享磁盘发生故障之后的共享磁盘镜像
除了按前一图中的描述配置镜像磁盘子系统外,您可能想要配置其他服务器。 例如,您可能想要在单个刀片服务器机柜中使用主服务器和两台 SSC 辅助服务器。 通过将服务器组放置在单台刀片服务器中,该刀片服务器本身可成为故障点。 必须定期增强读处理能力时(例如,执行大型报告任务时),下图中的配置是一种极具吸引力的解决方案。
图: 刀片服务器中的主服务器和 SSC 辅助服务器
您可以决定通过使用多台刀片服务器来避免单台刀片服务器可能引起的故障点,如下图中所示。
图: 用于防止单点故障的多台刀片服务器配置
在前一图中,如果刀片服务器 A 发生故障,那么它可以将主服务器角色转换为刀片服务器 B 上的 SSC 辅助服务器。因为它可以快速地使附加 SSC 辅助服务器在线,所以它可以动态地将附加 SSC 辅助服务器添加到刀片服务器 B,如下图所示。
图: 刀片服务器发生故障后进行故障转移
因为主服务器与磁盘镜像可支持的镜像磁盘之间的距离存在限制,所以您可能需要考虑使用共享磁盘和依靠共享磁盘镜像来提供磁盘可用性。例如,您可能希望磁盘子系统的两个副本之间距离较大。在这种情况下,可能选择使用 HAC 辅助服务器或 RHAC 辅助服务器来维护磁盘子系统的辅助副本。如果网络连接非常快(即,如果对辅助服务器执行 ping 操作的时间短于 50 毫秒),那么必须考虑使用 HAC 辅助服务器。对于较慢的网络连接,请考虑使用 RHAC 辅助服务器。下图显示了刀片服务器配置中 HAC 辅助服务器的示例。
图: 刀片服务器配置中的 HAC 辅助服务器
在前一图中显示的配置中,如果主节点发生故障,但是共享磁盘未损坏而且刀片服务器仍然可运行,那么可以将主服务器角色从刀片服务器 A 中的第一台服务器转换为同一刀片服务器中的另一台服务器。 更改主服务器会导致远程 HAC 辅助服务器的源自动重新路由至新的主服务器,如下图中所示:
图: 刀片服务器配置中从主服务器故障转移到 SSC 辅助服务器
但是,假设前一图中描述的故障不是刀片服务器中的某个刀片故障,而是整台刀片服务器的故障。在这种情况下,可能需要故障转移到 HAC 辅助服务器。因为 SSC 辅助服务器的启动非常快速,所以可以轻易地添加更多 SSC 辅助服务器。请注意,SSC 辅助服务器仅可处理主节点;当主服务器转换为刀片服务器 B,那么还可能启动刀片服务器 B 上的 SSC 辅助服务器,如下图所示。
图: 整台刀片服务器发生故障
Enterprise Replication 作为可恢复组的一部分
虽然 Enterprise Replication 不支持操作的 SYNC(同步)方式,但它有能力支持具有多台活动服务器的环境。在故障转移事件期间,Enterprise Replication 可以协调两台服务器之间的数据库差异。必须将 Enterprise Replication 视为提高服务器之间同步的方法,因为每个 Enterprise Replication 系统都维护一个独立的日志记录系统。下图中显示了使用 Enterprise Replication 的配置。
图: 将 Enterprise Replication 配置为可恢复组的一部分
使用 Enterprise Replication 的高可用性集群配置示例
假设在两个高可用性服务器集群之间需要 Enterprise Replication,请如下所示进行配置:
集群 1:
- 主服务器
- HAC 辅助服务器
- SSC 辅助服务器 1
- SSC 辅助服务器 2
- RHAC 辅助服务器 1
- RHAC 辅助服务器 2
集群 2:
- 主服务器
- HAC 辅助服务器
- SSC 辅助服务器 1
- SSC 辅助服务器 2
- RHAC 辅助服务器 1
- RHAC 辅助服务器 2
进一步假设每台服务器按照以下约定命名:
- 前三个字符:企业的名称
- 第四个字符:主机的简短数字
- 第 5、第 6 和第 7 个字符:集群编号
- 第 8、第 9 和第 10 个字符:服务器类型:“pri”表示主服务器,“sec”表示辅助服务器
- 第 11、第 12 和第 13 个字符:连接类型:“shm”或“tcp”
例如,名为 srv4_1_pri_shm 的服务器描述如下:
- srv = 企业的名称
- 4 = 主机简短编号
- _1_ = 集群编号
- pri = 这是一个主服务器
- shm = 连接类型使用共享内存通信
sqlhosts 文件中的以下条目将支持上面的配置:
srv4_1_pri_shm onipcshm sun-mach4 srv4_1_pri_shm
srv4_1_sec_shm onipcshm sun-mach4 srv4_1_sec_shm
srv5_1_rss_shm onipcshm sun-mach5 srv5_1_rss_shm
srv5_1_sds_shm onipcshm sun-mach5 srv5_1_sds_shm
srv6_1_rss_shm onipcshm sun-mach6 srv6_1_rss_shm
srv6_1_sds_shm onipcshm sun-mach6 srv6_1_sds_shm
srv_1_cluster group - - i=1
srv4_1_pri_tcp ontlitcp sun-mach4 21316 g=srv_1_cluster
srv4_1_sec_tcp ontlitcp sun-mach4 21317 g=srv_1_cluster
srv5_1_rss_tcp ontlitcp sun-mach5 21316 g=srv_1_cluster
srv5_1_sds_tcp ontlitcp sun-mach5 21317 g=srv_1_cluster
srv6_1_rss_tcp ontlitcp sun-mach6 21316 g=srv_1_cluster
srv6_1_sds_tcp ontlitcp sun-mach6 21317 g=srv_1_cluster
srv4_2_pri_shm onipcshm sun-mach4 srv4_2_pri_shm
srv4_2_sec_shm onipcshm sun-mach4 srv4_2_sec_shm
srv5_2_rss_shm onipcshm sun-mach5 srv5_2_rss_shm
srv5_2_sds_shm onipcshm sun-mach5 srv5_2_sds_shm
srv6_2_rss_shm onipcshm sun-mach6 srv6_2_rss_shm
srv6_2_sds_shm onipcshm sun-mach6 srv6_2_sds_shm
srv_2_cluster group - - i=2
srv4_2_pri_tcp ontlitcp sun-mach4 21318 g=srv_2_cluster
srv4_2_sec_tcp ontlitcp sun-mach4 21319 g=srv_2_cluster
srv5_2_rss_tcp ontlitcp sun-mach5 21318 g=srv_2_cluster
srv5_2_sds_tcp ontlitcp sun-mach5 21319 g=srv_2_cluster
srv6_2_rss_tcp ontlitcp sun-mach6 21318 g=srv_2_cluster
srv6_2_sds_tcp ontlitcp sun-mach6 21319 g=srv_2_cluster
复杂故障转移恢复策略的示例
本主题描述了用于在出现较大区域范围灾难时,实现最大可用性的三层服务器方法。
通常,HAC 辅助服务器提供 SSC 辅助服务器的备份,并支持在地理位置上距离主系统较远的高度可用系统。RHAC 辅助服务器为 HAC 辅助服务器提供附加可用性,并视为灾难可用性解决方案。如果必须使用 RHAC 辅助服务器确保可用性,那么将强制您通过执行备份与复原来手动重新构建其他系统,以恢复正常运行。要进一步理解此内容,将提供出现较大范围灾难的场景,例如风暴。
要提供最大可用性以免受区域性灾难的影响,需要分层可用性。第一层提供的可用性解决方案可处理短时间的本地故障。例如,这可能包括将一些刀片服务器连接到运行 SSC 辅助服务器的单个磁盘子系统。将 SSC 辅助服务器放置在校园内的多个位置可在发生本地中断时提供无缝故障转移。
您可能想要添加第二层,通过包含带有其自身磁盘副本的备用位置来提高可用性。要防护较大范围的灾难,您可能需要考虑配置位于较远位置(可能几百英里)的 HAC 辅助服务器。也可能想要使用远程系统作为刀片服务器或某些其他多服务器系统。如果发生故障转移并且远程 HAC 辅助服务器成为主服务器,那么通过提供第二层可轻松启动远程站点上的 SSC 辅助服务器。
但是,即使是两层的方法也可能不够用。某个区域内的飓风会在几百公里外生成龙卷风。要防护这种情况,请考虑添加第三层保护,例如位于数千英里的 RHAC 辅助服务器。此三层方法提供了可很大程度减少中断风险的额外冗余。
图: 三层服务器可用性的配置
现在假设新奥尔良校园的建筑物 A 中发生了本地中断。可能是机房内的水管破裂使水对刀片服务器和共享磁盘子系统的主副本造成了损害。通过运行 onmode -d 以使主服务器名位于建筑物 B 中的刀片服务器上运行的某台 SSC 辅助服务器上来将主服务器的角色切换为建筑物 B。这将导致其他所有辅助节点自动连接到新的主节点。
图: 第一层保护
如果新奥尔良发生了区域性中断,导致建筑物 A 和建筑物 B 均丢失,那么您可以将主服务器角色切换至孟菲斯。此外,您也可能使丹佛进入到 HAC 辅助服务器,并可将附加 SSC 辅助服务器添加到孟菲斯中的机器。
图: 第二层保护
影响两个站点的更大型中断应需要切换至最远的系统。
图: 第三层保护
表 1. 各种需求的建议配置
要求 | 建议配置 |
---|---|
必须定期增大报告容量 | 请使用 SSC 辅助服务器 |
您使用的是提供足够磁盘硬件可用性的 SAN 设备,但是担心发生服务器故障 | 请使用 SSC 辅助服务器 |
您使用的是提供足够磁盘硬件镜像的 SAN 设备,但是也需要当主操作丢失(并且镜像磁盘的限制不是问题)时能够恢复在线状态的第二组服务器 | 考虑使用在两个站点上运行 SSC 辅助服务器的两台刀片服务器中心 |
您需要具有距离适中的备份站点,但不能容忍故障转移期间出现任何数据丢失 | 考虑使用两台刀片服务器中心,SSC 辅助服务器在主刀片服务器中心上,HAC 辅助服务器在远程刀片服务器上。 |
您需要具有未曾丢失事务的高度可用系统,但是还必须在世界的另一面上设置远程系统 | 考虑使用针对数据复制运行完全同步方式或接近同步方式的本地 HAC 辅助服务器,并同时在世界另一端使用 RHAC 辅助服务器。 |
您需要具有高可用性解决方案,但是因为您所在区域中的网络,ping 的最佳响应时间为大约 200 ms | 考虑使用 RHAC 辅助服务器 |
您需要备份站点,但不具有与备份站点之间的任何直接通信 | 考虑使用带有备份与复原的“连续日志复原” |
只要数据最终能够到达目的地,您就能够忍受数据交付过程中的延迟;但是在任何情况下都必须具有快速故障转移 | 考虑使用硬件磁盘镜像与 ER 相结合的 SSC 辅助服务器。 |
您需要其他写处理能力,能够容忍这些写操作交付中有些延迟,需要高度可用的事务并能够分割工作负载 | 考虑使用带有 SSC 辅助服务器的 ER |
高可用性集群环境故障诊断
高可用性集群环境与独立服务器环境相比,需要很少甚至不需要额外的故障诊断。 本主题说明了用于描述高可用性集群环境的术语,并提供了一些常见的故障诊断过程。
可以使用诊断工具显示高可用性环境的配置,并验证是否正确设置辅助服务器来更新数据。
服务器会快速处理事务。onstat 命令只在运行瞬间显示状态信息。
为了更新辅助服务器上的数据,GBase 8s 在主数据库服务器和辅助数据库服务器上创建了代理分发器。为每个代理分发器都分配了一个在集群内唯一的标识。 代理分发器负责将 DML 更新请求从辅助服务器发送至主服务器。 辅助服务器根据辅助服务器的 onconfig 文件中的 UPDATABLE_SECONDARY 设置确定要创建的代理分发器的实例数。
对于高可用性集群环境中的可更新辅助服务器,从可更新辅助服务器到主服务器的加密需要 SMX 加密。要加密从可更新辅助服务器发送到主服务器的数据,请在辅助服务器上设置 ENCRYPT_SMX 配置参数。请参阅启用 SMX 加密以获取更多信息。
在高可用性集群中初始化可更新的辅助服务器时,该服务器将保持快速恢复方式,直到所有打开的事务(包括已打开和已准备好的 XA 事务)完成为止。处于快速恢复方式时,应用程序不能连接到该服务器。在所有已打开的事务落实或回滚之前,服务器将保持快速恢复方式。
在主服务器上使用 onstat -g proxy 命令查看有关高可用性集群中所有代理分发器的信息。
onstat -g proxy
Secondary Proxy Reference Transaction Hot Row
Node ID Count Count Total
serv2 392 0 2 112
serv2 393 0 2 150
检查前一示例中 onstat 命令的输出,两个代理分发器的标识为 392 和 393. 事务计数显示每个代理分发器当前正在处理的事务数。
在辅助服务器上运行 onstat -g proxy,以便查看有关能够为来自辅助服务器的更新请求提供服务的代理分发器的信息。
onstat -g proxy
Primary Proxy Reference Transaction Hot Row
Node ID Count Count Total
serv1 392 0 2 112
serv1 393 0 2 150
在此示例中,服务器是共享磁盘 (SSC) 辅助服务器,并且已配置为更新数据。 另外,服务器被连接到命名为 serv1 的主服务器。并且具有两个代理分发器,每个的事务计数为 2。
在主服务器上使用 onstat -g proxy all,以便显示有关代理分发器和代理线程的信息。代理分发器创建了一个或多个代理线程以用于处理来自辅助服务器的数据更新。
onstat -g proxy all
Secondary Proxy Reference Transaction Hot Row
Node ID Count Count Total
serv2 392 0 2 1
serv2 393 0 2 0
TID Flags Proxy Source Proxy Current sqlerrno iserrno
ID SessID TxnID Seq
63 0x00000024 392 22 1 5 0 0
64 0x00000024 392 19 2 5 0 0
62 0x00000024 393 23 1 5 0 0
65 0x00000024 393 21 2 5 0 0
在 onstat -g proxy all 命令输出中,TID 表示在主服务器上运行的代理线程的标识。 Source SessID 表示辅助服务器上的用户会话标识。 Proxy TxnID 显示当前事务的序号。 每个 Proxy TxnID 对于代理分发器而言都是唯一的。Current® Seq 表示正在处理的事务中当前操作的序号。每个发送至辅助服务器的数据库事务都被从内部分成一个或多个操作,然后将这些操作发送至主服务器。 最后两个字段 sqlerrno 和 iserrno 显示在事务中遇到的任何 SQL 或 ISAM/RSAM 错误。 错误数 0 表示完成且没有错误。
在辅助服务器上运行 onstat -g proxy all 会显示有关当前可更新辅助服务器上数据的所有会话的信息。
onstat -g proxy all
Primary Proxy Reference Transaction Hot Row
Node ID Count Count Total
serv1 3466 0 0 1
serv1 3465 0 1 0
Session Proxy Proxy Proxy Current Pending Reference
ID TID TxnID Seq Ops Count
19 3465 67 1 23 0 1
在辅助服务器上运行的 onstat -g proxy all 命令生成的输出中,Session 表示该辅助服务器上的用户会话标识。 Proxy ID 和 Proxy TID 与在主服务器上显示的一样。 Pending Ops 显示正在等待传送至主服务器的操作数。 Reference Count 显示该事务正在使用的线程数。 当 Reference Count显示 0 时,表示事务处理已完成。
要显示由给定分发器执行的当前工作的详细信息,请使用:
onstat -g proxy <proxy id> [proxy transaction id] [operation number]
代理事务标识和操作编号都是可选参数。 如果已提供,那么第一个编号将视为代理事务标识。 如果其后有第二个编号,那么会将此编号解释为操作编号。 如果没有代理事务标识,该命令执行的任务与以下命令相同:onstat -。与此类似,如果针对给定代理事务标识不存在此类操作编号,那么该命令执行的任务与以下命令相同:onstat -。
使用以下命令显示服务器是否配置为允许对数据进行更新的相关信息。 该命令可以在主服务器或辅助服务器上运行:
onstat -g <server_type>
示例:
onstat -g rssonstat -g sds
onstat -g dri
使用来自于主服务器的设置来配置连接管理器
这常常有助于通过与主服务器上相同的配置参数来配置连接管理器实例。 这在现有应用程序指向主服务器,且不希望将这些应用程序重新编译为指向连接管理器时很有用。 通过使用接下来的过程,配置连接管理器实例,以便现有应用程序连接到连接管理器而不是主服务器。
对于此示例:
- 尚未配置连接管理器实例。
- 您拥有主数据库服务器、HAC 辅助服务器、SSC 辅助服务器和 RHAC 辅助服务器。
- 主服务器的 DBSERVERNAME 为 myserv
- 服务名称为 5656
要将所有服务器迁移至新的主服务器 DBSERVERNAME:
-
使用 DBSERVERNAME 和新的主服务器的服务名称更新所有辅助服务器上的 sqlhosts 文件。
现有 sqlhosts 文件:
#dbservername nettype hostname servicename options
myserv protocol host 5656修改的 sqlhosts 文件:
#dbservername nettype hostname servicename options
myserv_pri protocol host 5656 -
在连接管理器服务器上,按照如下所示编辑 sqlhosts 文件:
#dbservername nettype hostname servicename options
myserv protocol host 5656 -
在连接管理器服务器上,编辑连接管理器配置文件以设置连接管理器实例的名称:
NAME myserv
SLA ...
LOG ...
LOGFILE ...请注意连接管理器“名称”和相应的 sqlhosts 文件值与原先主服务器的相同。 这使客户机应用程序可以连接到连接管理器而无需重新编译应用程序。
-
启动连接管理器:oncmsm
-
关闭 SSC 辅助服务器和主服务器。
-
在主服务器上,更新 onconfig 文件中的 DBSERVERNAME 配置参数:
原有的:
DBSERVERNAME myserv
新的:
DBSERVERNAME myserv_pri
-
使用以下命令启动主服务器:oninit -SDS=myserv_pri
-
使用 oninit 命令启动 SSC 辅助服务器。
-
在 RHAC 辅助服务器上,关闭服务器,然后以物理恢复方式启动:oninit -PHY
-
在 RHAC 辅助服务器上,通过以下命令连接到主服务器:onmode -d RSS myserv_pri
对于 HAC 辅助服务器,不需要更多设置,因为会自动重新建立 HAC 对。 然而,可以执行步骤 6 和 7,以便在 HAC 辅助服务器中注册新的主服务器名称。
设计数据复制组客户机
本主题说明了针对连接至正在运行数据复制的数据库服务器的客户机的各种设计注意事项。
另请参阅辅助服务器上的隔离级别,以获取有关辅助服务器上的 COMMITTED READ 和 COMMITTED READ LAST COMMITTED 隔离级别的信息。
用于排序的临时数据库空间和临时表的使用
即使辅助数据库服务器处于只读方式,当它必须排序或创建临时表时也会进行写操作。临时数据库空间说明数据库服务器在何处找到临时空间以在排序期间使用或用于临时表。
要防止辅助数据库服务器写入处于逻辑恢复方式的数据库空间,您必须采取以下操作:
-
确保一个或多个临时数据库空间存在。
有关创建临时数据库空间的指示信息,请参阅创建使用缺省页大小的数据库空间。
-
执行以下操作之一:
- 将辅助数据库服务器的 onconfig 文件中的 DBSPACETEMP 参数设置为临时数据库空间或数据库空间。
- 将客户机应用程序的 DBSPACETEMP 环境变量设置为临时数据库空间或数据库空间。
在辅助服务器(SSC 辅助服务器、RHAC 辅助服务器和 HAC 辅助服务器)上创建的临时表必须通过 WITH NO LOG 选项来创建。或者,在辅助服务器上将 TEMPTAB_NOLOG 配置参数设置为 1,以便将临时表的缺省日志记录方式更改为无日志记录。 在启用日志记录的情况下创建的表将导致 ISAM 错误。
对于 SSC 辅助服务器,设置 SDS_TEMPDBS 配置参数以配置 SSC 辅助服务器使用的临时数据库空间。
对于 SSC 辅助服务器,不需要显式添加临时数据库空间,因为启动辅助服务器时,该服务器会分配由 SDS_TEMPDBS 指定的块。只需要准备用于接受块的设备。
如果高可用性集群中的主服务器发生故障,并且 SSC 辅助服务器作为主服务器接管,那么 SSC 辅助服务器上为 SDS_TEMPDBS 配置参数设置的值将用于临时数据库空间,直到服务器重新启动。 必须确保 SSC 辅助服务器上为 SDS_TEMPDBS 配置参数指定的值与主服务器上指定的值不同。重新启动 SSC 辅助服务器之后,将使用 DBSPACETEMP 配置参数。
执行基本管理任务
这些主题包含有关系统正在运行 HAC 时如何执行数据库服务器管理任务的指示信息。
更改数据库服务器配置参数
一些配置参数必须在复制对中的两个数据库服务器上均设置为相同的值(如集群的数据库服务器配置需求中所列)。其他 GBase 8s 配置参数可设置为不同的值。
要对 onconfig 文件进行更改,请执行以下操作:
-
使用 onmode -k 选项使每个数据库服务器脱机。
如果 DRAUTO 设置为 RETAIN_TYPE 或 REVERSE_TYPE,那么可以更加轻松地先使辅助数据库服务器脱机。
-
更改每个数据库服务器上的参数。
-
从已脱机的最后一个数据库服务器开始,将每个数据库服务器恢复在线。
例如,如果您最后一次将辅助数据库服务器变为脱机,那么首先将辅助数据库服务器恢复在线。表 1 列出了将主数据库服务器和辅助数据库服务器恢复在线的过程。
如果配置参数无需在复制对中的每个数据库服务器上具有相同值,那么可以分别在主数据库服务器或辅助数据库服务器上更改该值。
备份存储空间和逻辑日志文件
当您使用 HAC 时,您必须仅在主数据库服务器上备份逻辑日志文件和存储空间。但要准备在数据库服务器的类型更改为标准类型的情况下在辅助数据库服务器上执行存储空间和逻辑日志备份。
您必须在两个数据库服务器上使用相同的备份与复原工具。
所用的块大小和磁带大小(用于存储空间备份和逻辑日志备份)必须在主数据库服务器和辅助数据库服务器上均相同。
您可以使用 ontape 将磁带大小设置为 0 以自动使用磁带的全部物理容量。
更改数据库的记录方式
当您正在使用 HAC 时,您无法打开主数据库服务器上数据库的事务日志记录。您可以为数据库关闭日志记录;但是,随后对该数据库所作的更改将不会复制到辅助数据库服务器上。
要打开数据库日志记录,请执行以下操作:
-
要关闭 HAC,请关闭辅助数据库服务器。
-
打开数据库日志记录。
在您为数据库打开日志记录后,如果您启动数据复制但未在主数据库服务器上执行 0 级备份,然后在辅助数据库服务器上进行复原,那么主数据库服务器和辅助数据库服务器上的数据库可能有不同数据。 这种情况可能会导致数据复制问题。
-
在主数据库服务器上执行 0 级备份并在辅助数据库服务器上复原。
在首次启动 HAC 中描述了该过程。
添加和删除块与存储空间
您仅可从主数据库服务器执行磁盘布局操作(如添加或删除块和数据库空间)。在辅助数据库服务器上复制该操作。 这种安排将确保复制对中两个数据库服务器上的磁盘布局保持一致。
块的目录路径名或实际文件在您创建块之前就必须存在。请确保在主数据库服务器上创建块之前路径名和偏移量(后者如果适用)存在于辅助数据库服务器上,否则数据库服务器会关闭数据复制。
在具有一个或多个 SSC 辅助服务器的高可用性集群的主服务器上添加数据库空间时,某个 SSC 辅助服务器的 online.log 可能显示以下错误:“Assert Failed: Page Check Error”。如果发生该情况,请关闭并重新启动该 SSC 辅助服务器。在重新启动该 SSC 辅助服务器后,新添加的数据库空间将可用并完全发挥作用。
重命名块
如果为块路径名使用了符号链接,那么可以在 HAC 运行时对块重命名。有关重命名块的指示信息,请参阅《GBase 8s 备份与复原指南》。
如果没有为块路径名使用符号链接,那么在重命名块时,必须使两个数据库服务器保持脱机,直到完成数据库服务器冷复原。
要在发生故障的 HAC 服务器上重命名块,请执行以下操作:
- 将未损坏的服务器的方式更改为标准方式。
- 对标准服务器进行 0 级备份。
- 关闭标准服务器。
- 在从新的 0 级归档进行冷复原期间重命名标准服务器上的块(有关指示信息,请参阅《GBase 8s 备份与复原指南》)。
- 启动标准服务器。
- 对标准服务器再次进行 0 级归档。请确保服务器处于标准方式。
- 用新的 0 级备份复原发生故障的服务器并重新建立 HAC 对。
在辅助数据库服务器上保存块状态
对于数据复制对,如果在辅助数据库服务器上更改块的状态(脱机、在线),并且该辅助服务器在检查点完成前重新启动,那么不保存更新的块状态。
要确保新的块状态清空到辅助数据库服务器上的保留页,可在主数据库服务器上强制执行检查点并验证检查点也已在辅助数据库服务器上完成。即使辅助数据库服务器重新启动,此时也将保留新的块状态。
如果辅助数据库服务器上的主块脱机,您可以从镜像块恢复该主块。
要从镜像块恢复主块,请执行以下操作:
-
在辅助数据库服务器上运行 onspaces -s 以使主块在线。
您也可使用 Server Administrator使主块在线。
-
在主数据库服务器上运行 onmode -c 以强制执行检查点。
-
在主数据库服务器上运行 onmode -m 以验证检查点已实际执行。
-
在辅助据库服务器上运行 onmode -m 以验证检查点也已在辅助数据库服务器上完成。
完成这些步骤后,重新启动辅助数据库服务器时,主块将在线。
使用和更改块的镜像
在您可以添加镜像块之前,必须已经在主数据库服务器和辅助数据库服务器上均分配了该块的磁盘空间。如果您希望对复制对中一个数据库服务器上的数据库空间制作镜像,您必须在两个数据库服务器上均为该数据库空间创建镜像块。有关分配磁盘空间的一般信息,请参阅分配磁盘空间。
不将 MIRROR 配置参数设置为 1 除非您正在使用镜像。
您仅可从主数据库服务器执行磁盘布局操作。因此,您可以仅从主数据库服务器添加或删除镜像块。您向主数据库服务器添加的或从中删除的镜像块也添加到辅助数据库服务器或从辅助数据库服务器中删除。您必须对辅助数据库服务器上新添加的镜像块执行镜像恢复。 有关更多信息,请参阅恢复镜像块。
当您从主数据库服务器删除块时,GBase 8s 自动在辅助数据库服务器上删除相应块。这对主块和镜像块均适用。
当您为主数据库服务器上的数据库空间关闭镜像时,GBase 8s 不会为辅助数据库服务器上的相应数据库空间关闭镜像。要为辅助数据库服务器上的数据库空间关闭镜像而不依赖主服务器,请使用 onspaces -r。有关关闭镜像的更多信息,请参阅结束镜像过程。
您可以在主数据库服务器或辅助数据库服务器上将镜像块脱机或恢复镜像块。这些进程对于 HAC 是透明的。
管理物理日志
物理日志的大小必须在两个数据库服务器上都相同。如果您更改了主数据库服务器上物理日志的大小和位置,那么此更改将复制到辅助数据库服务器。 辅助数据库服务器上的 ONCONFIG 值将自动更新。
有关更改物理日志的大小和位置的信息,请参阅管理物理日志。
管理逻辑日志
逻辑日志的大小必须在两个数据库服务器上都相同。按管理逻辑日志文件中所述,您可以用 onparams 实用程序添加或删除逻辑日志文件。GBase 8s 将在辅助数据库服务器上复制此更改;但是辅助数据库服务器上的 LOGFILES 参数将不会进行更新。因此,当您从主数据库服务器发出 onparams 命令后,必须将 LOGFILES 参数手动更改为辅助数据库服务器上的相应值。最后,为使更改生效,您必须对主数据库服务器上的根数据库空间执行 0 级备份。
如果您向主数据库服务器添加逻辑日志文件,该文件在您执行 0 级备份时就立即可供使用并标记为 F。辅助数据库服务器上新的逻辑日志文件仍然标志为 A。但是,这种情况不会阻止辅助数据库服务器写入文件。
管理虚拟处理器
虚拟处理器的数目对数据复制没有影响。您可以分别配置和调整复制对中的每个数据库服务器。
管理共享内存
如果对一台数据库服务器上的共享内存 ONCONFIG 参数进行了更改,那么必须同时对另一数据库服务器上的共享内存 ONCONFIG 参数进行相同更改。有关进行该更改的过程,请参阅更改数据库服务器配置参数。
设置来自主服务器的响应的等待时间
可使用 IFX_SMX_TIMEOUT 和 IFX_SMX_TIMEOUT_RETRY 这两个环境变量来处理高可用性复制 (HAC)、远程独立 (RHAC) 或共享磁盘 (SSC) 辅助服务器等待来自主服务器的响应的时间量。
使用:
- IFX_SMX_TIMEOUT 环境变量可以指定辅助服务器等待来自主服务器的消息的最大秒数。
- IFX_SMX_TIMEOUT_RETRY 环境变量以指定在未接收到来自主服务器的响应时,辅助服务器重复 IFX_SMX_TIMEOUT 环境变量指定的等待周期的次数。
设置服务器之间 SMX 活动的等待时间
您可以设置 SMX_PING_INTERVAL 和 SMX_PING_RETRY 配置参数以调整高可用性集群中辅助服务器等待主服务器活动的时间间隔。
使用 SMX_PING_INTERVAL 配置参数可指定超时时间间隔秒数,辅助服务器在此期间通过“服务器多路复用器组”(SMX) 连接等待主服务器的活动。
使用 SMX_PING_RETRY 配置组参数可指定在未收到来自主服务器的响应时,辅助服务器重复 SMX_PING_INTERVAL 配置参数指定的超时时间间隔的最大次数。 如果达到最大次数而无响应,那么辅助服务器将在 online.log 中输出错误消息并关闭“服务器多路复用器组”(SMX) 连接。
将索引复制到 HAC 辅助数据库服务器
如果启用索引页日志记录,索引会自动复制到 HAC 辅助数据库服务器上(请参阅索引页日志记录)。 如果禁用索引页日志记录,并且 HAC 辅助数据库服务器上的索引已损坏而必须重建,那么您可以使用以下两种方法之一:
- 手动地将索引从主服务器复制到辅助服务器中。
- 使辅助服务器自动复制索引(如果您使辅助服务器能够执行此操作)。
要使辅助数据库服务器能够自动复制索引,请执行以下操作之一:
- 将 onmode -d idxauto 设置为 on 。
- 将 DRIDXAUTO 配置参数的值设置为 1 。
在您设置这些值的任意一个之后,当辅助数据库服务器上的某个线程检测到损坏的索引时,索引将自动复制到辅助数据库服务器中。重新启动索引复制可能需要 DRTIMEOUT 配置参数中指定的时间(以秒计)。
有时,您可能希望手动复制索引,例如:当由于表被锁定您因此希望延迟索引修复时。如果您希望能够在 HAC 辅助服务器上手动复制索引,那么关闭自动复制功能。
要关闭自动索引复制功能,请执行以下操作之一:
- 将 onmode -d idxauto 设置为 off 。
- 将 DRIDXAUTO 配置参数设置为 0 。
如果 onmode -d idxauto 设置为 off 或 DRIDXAUTO 设置为 0,并且辅助服务器检测到损坏的索引,那么可以通过发出以下格式的 onmode -d index 命令在 HAC 辅助服务器上手动复制索引:onmode -d index database:[ownername].table#index
例如:onmode -d index cash_db:user_dx.table_12#index_z
如果分段索引具有一个损坏分段,那么 onmode -d idxauto 选项只会转移单个受影响的分段,而 onmode -d index 选项将会转移整个索引。
当打开或关闭自动索引复制功能时,您可以 onmode 命令或 DRIDXAUTO 配置参数。如果使用 onmode 命令,那么无需停止并重新启动数据库服务器。当您使用 DRIDXAUTO 参数时,数据库服务器将使用您指定的设置重新启动。onmode 命令不会更改 DRIDXAUTO 值。如果您使用 onmode 命令,那么您必须手动更改 DRIDXAUTO 的值。
辅助服务器生成的 online.log 文件包含有关所有已复制索引的信息。
加密 HAC 数据库服务器之间的数据通信
要使用已加密的 HAC 连接与通信支持模块 (CSM) 客户机/服务器加密一起使用,必须配置两个网络端口:
- 其中一个网络端口必须配置用于 HAC。
- 另一网络端口必须配置用于 CSM 客户机/服务器连接。
可以使用 GBase 8s 服务器加密选项来加密 HAC 对的数据库服务器之间的数据流量。当您想要确保安全的数据传输时,请如此操作。
当您启用加密后,HAC 对中的首个数据库服务器将在数据发送到对中另一服务器之前加密数据。接收数据的服务器收到数据即开始解密数据。
对于高可用性集群环境中的可更新辅助服务器,从可更新辅助服务器到主服务器的加密需要 SMX 加密。要加密从可更新辅助服务器发送到主服务器的数据,请在辅助服务器上设置 ENCRYPT_SMX 配置参数。请参阅启用 SMX 加密以获取更多信息。
您无法在网络连接上启动 HAC,该连接是配置以使用客户机/服务器连接的 CSM 加密的。
可能需要附加的缓冲区或较大的缓冲区以满足已加密数据的大小。
要加密两台 HAC 数据库服务器之间的数据流量,请执行以下操作:
-
在 HAC 对中的首台服务器上设置以下配置参数。
- ENCRYPT_HDR,该参数启用或禁用 HAC 加密
- ENCRYPT_CIPHERS,它指定用于加密的密码和方式
- ENCRYPT_MAC,它控制消息认证代码 (MAC) 生成的级别
- ENCRYPT_MACFILE,它指定了 MAC 密钥文件的完整路径名列表
- ENCRYPT_SWITCH,它指定自动重新协商密码和密钥之间的分钟数
要更改这些参数,请遵循更改数据库服务器配置参数中的指示信息。
-
在辅助服务器上设置加密配置参数。
ENCRYPT_HDR、ENCRYPT_CIPHERS、ENCRYPT_MAC 和 ENCRYPT_SWITCH 配置参数必须具有主服务器上对应配置参数的相同值。ENCRYPT_MACFILE 配置参数可以在每台服务器上具有不同的值,但是文件中必须包含相同的 MAC 密钥。
例如,指定以下有关 HAC 对中的主服务器和辅助服务器的信息:
配置参数 | 主服务器上的样本设置 | 辅助服务器上的样本设置 |
---|---|---|
ENCRYPT_HDR | 1 | 1 |
ENCRYPT_CIPHERS | all | all |
ENCRYPT_MAC | medium | medium |
ENCRYPT_MACFILE | /vobs/tristan/sqldist/etc/mac1.dat | /vobs/tristan/sqldist/etc/mac2.dat |
ENCRYPT_SWITCH | 60,60 | 60,60 |
在本例中,ENCRYPT_MACFILE 路径中主服务器的文件名是 mac1.dat,而 ENCRYPT_MACFILE 路径中辅助服务器的文件名是 mac2.dat。否则,所有的设置在两台服务器上是一样的。
仅使用这些配置参数来指定 HAC 的加密信息。不能通过使用 sqlhosts 文件中的 CSM 选项来指定 HAC 加密信息。
HAC 加密与 Enterprise Replication 加密一起使用,并控制启用或禁用 Enterprise Replication 加密。 当 HAC 和 Enterprise Replication 相互联合使用时,可共享同样的 ENCRYPT_CIPHER、ENCRYPT_MAC、ENCRYPT_MACFILE 和 ENCRYPT_SWITCH 配置参数。
有关这些配置参数的更多信息,请参阅《GBase 8s 管理员参考》 。
调整 HAC 服务器对中的 LRU 清空和自动调节
当为 HAC 配置了服务器,由辅助服务器触发的检查点是非分块的。检查点的这些类型将会陆续发生。 如果辅助服务器触发了非阻塞检查点,那么将阻塞主服务器上的事务,以确保辅助服务器的完整性不受影响。如果系统上的辅助服务器触发非分块检查点,那么必须将主服务器上的 LRU 清空调整得更加积极以减少事务分块。
要增加 LRU 清空,请减少 BUFFERPOOL 配置参数中 lru_min_dirty 和 lru_max_dirty 的值。
可以独立地在每个 HAC 节点上打开或关闭自动 LRU 调整。每台 HAC 数据库服务器上的设置可以不同。有关关闭自动 LRU 调整的信息,请参阅打开或关闭自动 LRU 调整。
快速克隆主服务器
可使用 gclone 实用程序来执行一步式服务器安装,从而使用最低设置或配置来克隆高可用性集群中的主服务器。
使用 gclone 实用程序可以创建独立的 GBase 8s 服务器,或创建 RHAC 辅助服务器。通过使用 gclone 实用程序,数据库管理员可快速、轻松、安全地通过正在运行的 GBase 8s 实例创建克隆服务器,而无需备份源服务器上的数据以及将其传输并复原到克隆服务器上。使用 gclone 实用程序可同时启动备份与复原进程,因此无需对磁盘或磁带执行数据读写。
通过使用加密的服务器多路复用器组 (SMX) 连接,可以将数据通过网络从源服务器传输到目标服务器。
通过从脚本调用 gclone 实用程序,可以自动创建克隆实例。
创建主服务器的克隆
可使用 gclone 实用程序创建主服务器的克隆。
下面是创建服务器克隆的一般步骤:
-
在目标服务器上设置以下环境变量:
- GBASEDBTDIR
- GBASEDBTSERVER
- ONCONFIG
- GBASEDBTSQLHOSTS
-
在目标服务器上,创建源服务器上包含的所有块。执行以下步骤来创建这些块:
a. 在源服务器上,运行 onstat -d 命令以显示块列表:
```info
onstat -d
```b. 在目标服务器上,以用户 gbasedbt 的身份登录,并使用命令 touch、chown 和 chmod 创建这些块。例如,要创建名为 /usr/gbasedbt/chunks/rootdbs.chunk 的块,请执行以下步骤:
```info
$ su gbasedbt
Password:
$ touch /usr/gbasedbt/chunks/rootdbs.chunk
$ chown gbasedbt:gbasedbt /usr/gbasedbt/chunks/rootdbs.chunk
$ chmod 660 /usr/gbasedbt/chunks/rootdbs.chunk
```c. 对 onstat -d 命令报告的每个块重复执行上一步中的所有命令。
-
保持以用户 gbasedbt 的身份登录的状态下,在启动克隆服务器的目标系统上运行带适当参数的 gclone 实用程序。
-
可以选择在目标服务器上创建 onconfig 和 sqlhosts 文件。
使用以下步骤,使用源服务器上的 ONCONFIG 和 GBASEDBTSQLHOSTS 配置文件来克隆服务器。
在本示例中,省略了 -L 选项,使 gclone 实用程序从源服务器检索必要的配置信息。这些配置文件用作创建目标服务器配置的模板。通过让 gclone 实用程序创建配置文件,可以节约时间,并减少在配置文件中产生错误的可能性。
在本示例中,假定源服务器 (Amsterdam) 将 sqlhosts 文件配置如下:
#Server Protocol HostName Service Group
Amsterdam onsoctcp 192.168.0.1 123 -
还必须具有目标服务器的名称、IP 地址和端口号。本示例使用了以下信息:
- 源服务器名称:Amsterdam
- 源 IP 地址:192.168.0.1
- 源端口:123
- 目标服务器名称:Berlin
- 目标 IP 地址:192.168.0.2
- 目标端口:456
- 在目标服务器上,以用户 gbasedbt 的身份登录,并使用 touch、chown 和 chmod 命令创建块、更改其所有者并更改其许可权。块路径必须与块在源服务器上的路径匹配。
- 以用户 gbasedbt 的身份运行 gclone 实用程序:
gclone -T -S Amsterdam -I 192.168.0.1 -P 123 -t Berlin
-i 192.168.0.2 -p 456
gclone 实用程序将修改源服务器上的 sqlhosts 文件,并在新目标服务器上创建该文件的副本。目标服务器上的 sqlhosts 文件与源服务器上的相同:
#Server Protocol HostName Service Group
Amsterdam onsoctcp 192.168.0.1 123 -
Berlin onsoctcp 192.168.0.2 456
使用 -L (–useLocal) 选项在远程主机上创建服务器的克隆:-L 选项用于将源 onconfig 文件配置信息与目标 onconfig 文件合并。此选项还将把源 sqlhosts 文件复制到目标服务器。
- 源服务器名称:Amsterdam
- 源 IP 地址:192.168.0.1
- 源端口:123
- 目标服务器名称:Berlin
- 目标 IP 地址:192.168.0.2
- 目标端口:456
- 在目标计算机上创建 onconfig 和 sqlhosts 文件并设置环境变量。
- 在目标服务器上,以用户 gbasedbt 的身份登录,并使用 touch、chown 和 chmod 命令创建块、更改其所有者并更改其许可权。块路径必须与块在源服务器上的路径匹配。
- 以用户 gbasedbt 的身份运行 gclone 实用程序:
gclone -T -L -S Amsterdam -I 192.168.0.1 -P 123 -t Berlin
-i 192.168.0.2 -p 456
要向现有高可用性集群添加 RHAC 辅助服务器,请执行以下操作:
- 源服务器名称:Amsterdam
- 源 IP 地址:192.168.0.1
- 源端口:123
- 目标服务器名称:Berlin
- 目标 IP 地址:192.168.0.2
- 目标端口:456
-
在目标计算机上创建 onconfig 和 sqlhosts 文件并设置环境变量。
-
在目标服务器上,以用户 gbasedbt 的身份登录,并使用 touch、chown 和 chmod 命令创建块、更改其所有者并更改其许可权。块路径必须与块在源服务器上的路径匹配。
-
在源服务器上(如有必要),通过以用户 gbasedbt 的身份运行以下命令来启用 LOG_INDEX_BUILDS 配置参数:
onmode -wf LOG_INDEX_BUILDS=1
-
在源服务器上,以用户 gbasedbt 的身份运行以下命令,以将目标服务器添加为 RHAC 辅助服务器:
onmode -d add RSS Berlin
-
以用户 gbasedbt 的身份运行 gclone 实用程序:
gclone -T -L -S Amsterdam -I 192.168.0.1 -P 123 -t Berlin
-i 192.168.0.2 -p 456 -s medium -d RSS
辅助服务器上的数据库更新
可以启用与辅助服务器相连的应用程序来更新数据库数据。如果在辅助服务器上启用写操作,那么会将 DELETE、INSERT、MERGE 和 UPDATE 操作传播到主服务器。
使用 UPDATABLE_SECONDARY 配置参数可控制辅助服务器是否可更新数据,并可配置更新操作使用的连接数。
辅助服务器上同时支持数据定义语言 (DDL) 语句和数据操作语言 (DML) 语句。
所有可更新的辅助服务器上都支持 dbimport 实用程序。
辅助服务器上不支持 dbimport 实用程序。
仅当满足以下条件时,远程独立 (RHAC) 辅助服务器上才支持 dbexport:
- STOP_APPLY 配置参数设置为非零的有效值。
- UPDATABLE_SECONDARY 配置参数设置为非零的有效值。
- USELASTCOMMITTED 配置参数设置为 COMMITTED READ、DIRTY READ 或 ALL。
USELASTCOMMITTED 会话环境设置可覆盖 USELASTCOMMITTED 配置参数设置。
如果配置了 UPDATABLE_SECONDARY 配置参数和 STOP_APPLY 配置参数,那么所有只读辅助服务器上都支持 dbschema 实用程序。
所有可更新的辅助服务器上都支持 dbschema 实用程序。
只读辅助服务器上也支持 dbschema 实用程序。但是,dbschema 实用程序在这些服务器上运行时,会显示一条警告消息。
使用 DDL 或 DML 的大多数应用程序可在高可用性集群中的任一辅助服务器上运行;但是,不支持以下 DDL 语句:
- CREATE DATABASE(无日志记录)
- CREATE EXTERNAL TABLE
- CREATE RAW TABLE
- CREATE TEMP TABLE(有日志记录)
- CREATE XADATASOURCE
- CREATE XADATASOURCE TYPE
- DROP XADATASOURCE
- DROP XADATASOURCE TYPE
- UPDATE STATISTICS
在集群环境中,可更新的辅助服务器上不支持 SET CONSTRAINTS、SET INDEXES 和 SET TRIGGERS 语句。 对于针对辅助服务器数据库中表对象的 UPDATE 操作,不会重定向 SET Database Object Mode 语句指定的任何会话层索引、触发器或约束方式。
仅当辅助服务器映像与主服务器映像匹配时,客户机应用程序才可以在辅助服务器上插入、更新和删除行。 支持以下数据类型:
- BIGINT
- BIGSERIAL
- BLOB
- BOOLEAN
- BYTE(存储在表中)
- CHAR
- CLOB
- DATE
- DECIMAL
- DATETIME
- FLOAT
- INT
- INT8
- INTERVAL
- MONEY
- NCHAR
- NVCHAR
- SERIAL
- SERIAL8
- SMALLFLOAT
- SMALLINT
- TEXT(存储在表中)
- VARCHAR
不支持存储在 BLOB 空间中的 BYTE 和 TEXT 数据类型,因为不能复制 BLOB 空间数据。
如果下列数据类型不接收指向另一个分区的指针引用,那么也支持它们:
- COLLECTION
- LIST
- LVARCHAR
- MULTISET
- ROW
- SET
- UDTVAR
主服务器映像与辅助服务器映像之间的任何差异都会导致 SQL 错误并回滚所有更改。
您不能在 HAC 辅助服务器、远程独立 (RHAC) 辅助服务器或共享磁盘 (SSC) 辅助服务器上使用以下实用程序:
- archecker
- dbload
- High-Performance Loader (HPL)
- ondblog
- onload
- onparams
- onperf
- onsnmp
- onspaces
- onunload
此外,不能在 HAC 辅助服务器或共享磁盘 (SSC) 辅助服务器上使用 dbexport 实用程序。在辅助服务器中,仅远程独立辅助 (RHAC) 服务器支持 dbexport 执行的写操作,并且只能与上述 STOP_APPLY、UPDATABLE_SECONDARY 和 USELASTCOMMITTED 配置参数设置一起使用。
为更新配置的辅助服务器不支持字节范围锁定。 辅助服务器上的字节范围锁不能提升为全对象锁。
复制智能大对象
使用可更新的辅助服务器时,可能会收到下面一条或多条错误消息:
- 12014
- 12015
- 12233
这些错误通常表明智能大对象文件描述符存在问题。以下任一条件均可导致这些错误:
- 落实事务之前,将智能大对象标识传递到其他事务或进程。因为所有对象(包括智能大对象)在落实事务之前都不会落实,所以不允许其他事务使用智能大对象。特别是脏读取可以访问锁定的智能大对象。
- 智能大对象在打开之后未关闭。在事务结束时,必须关闭辅助服务器上的所有智能大对象,尤其是已创建并随后回滚了事务的智能大对象。如果将智能大对象文件描述符保持打开状态,将导致在终止会话之前,内存始终保持已分配状态。
- 另一个进程删除了主服务器上的智能大对象。共享锁定不会自动从辅助服务器传播到主服务器,因此其他辅助服务器可能会访问主服务器上实际已删除的智能大对象。辅助服务器上重放包含该删除操作的日志记录或主服务器更新辅助服务器之前,这些访问将一直有效。
处理脏读取信息时,可能还会再返回三个错误代码:
- -126 (ISAM error: bad row id)
- -244 (SQL error: Could not do a physical-order read to fetch next row)
- -937
如果收到以上任一代码,请重试查询。
辅助服务器上的 LOCK TABLE 语句行为
可以从高可用性集群中的可更新辅助服务器设置对表的互斥锁定。对于从辅助服务器请求的互斥方式锁定,会话可读取表,但不能更新表。 此行为类似辅助服务器上的共享访问方式;即,如果一个会话以给定表上具有互斥锁定,那么其他任何会话均不能获取该表上的共享或互斥锁定。
辅助服务器上的隔离级别
所有类型的辅助服务器上均支持以下语句:
Set isolation to committed read
Set isolation to committed read last committed
设置已落实读取隔离的辅助服务器可以在本地读取已落实的数据。 如果主服务器上的已落实数据在辅助服务器上可用并已落实,它们也可以读取这些数据。 连接至辅助服务器的应用程序会接收当前已在辅助服务器上落实的数据。 请参阅设计数据复制组客户机,以获取有关针对连接至正在运行数据复制的数据库服务器的客户机设计注意事项的更多信息。
辅助服务器上的缺省隔离级别是 DIRTY READ;然而,设置显式隔离级别将启用正确的隔离级别:DIRTY READ、COMMITTED READ 或 COMMITTED READ LAST COMMITTED。
不支持 REPEATABLE READ 和 CURSOR STABILITY 隔离级别。 在忽略 CURSOR STABILITY 和 REPEATABLE READ 级别的情况下使用 SET ISOLATION 语句。
启动辅助服务器后,只有在启动检查点打开的所有事务已落实或回滚时,客户机应用程序才与服务器连接。
如果禁用了 UPDATABLE_SECONDARY 配置参数(通过取消设置或设置为零),辅助数据复制服务器将为只读。在这种情况下,辅助服务器上只能使用 DIRTY READ 或 READ UNCOMMITTED 事务隔离级别。
如果启用了 UPDATABLE_SECONDARY 参数(通过将其设置为大于零的有效连接数),辅助数据复制服务器可支持 COMMITTED READ、COMMITTED READ LAST COMMITTED 或 COMMITTED READ 事务隔离级别,或 USELASTCOMMITTED 会话环境变量。只有 SQL 的 DML 语句(DELETE、INSERT、UPDATE 和 MERGE 语句)以及 dbexport实用程序可支持对可更新辅助服务器执行写操作。(除 UPDATABLE_SECONDARY 之外,还必须设置 STOP_APPLY 和 USELASTCOMMITTED 配置参数,才能在辅助数据复制服务器上启用 dbexport 执行的写操作。)
使用 onstat -g ses 或 onstat -g sql 可查看隔离级别设置。请参阅《GBase 8s 管理员参考》 以获取更多信息。
设置锁定方式
在辅助服务器上发出 SET LOCK MODE TO WAIT 或 SET LOCK MODE TO WAIT n 语句,像在主服务器上一样为该会话设置锁定等待超时值。 当执行来自辅助服务器的更新时,在主服务器上为当前会话创建的代理线程将使用 SET LOCK MODE 设置的值。 如果 SET LOCK MODE 的值大于 DEADLOCK_TIMEOUT 的 ONCONFIG 参数值,就使用 DEADLOCK_TIMEOUT 的值。
高可用性集群辅助服务器上的瞬态类型
不论辅助服务器是只读还是可更新,都可以在高可用性集群辅助服务器上使用瞬态未命名复杂数据类型(ROW、SET、LIST 和 MULTISET)。辅助服务器上支持以下使用瞬态类型的操作类型:
- 使用瞬态类型的 SQL 查询
- 使用派生表、集合子查询以及 XML 功能的 SQL 查询(这些语句隐式地使用瞬态类型)
- 由使用瞬态类型的 CREATE TEMP 语句创建的临时表
请参阅《GBase 8s SQL 指南:参考》和《GBase 8s SQL 指南:语法》以获取有关复合数据类型的信息。
行版本控制
使用行版本控制可确定是否已更改了行并检测冲突。启用行版本控制之后,会对表的每一行进行配置以使其包含校验和及版本号。当首次插入行时,会自动生成校验和,并且版本设置为 1。每次更新该行时,版本都会加一,但校验和值保持不变。 如果删除一行并在表中重新插入另一行,那么通过行版本控制可识别出新插入的行不同于删除的行。 通过比较辅助服务器和主服务器之间的行校验和与行版本,可以检测出数据冲突。
Web 应用程序可以使用版本列以确定之前检索对象中包含的信息是否仍处于最新状态。例如,Web 应用程序可能会向客户显示待售商品。 当客户决定购买某个产品时,应用程序会检查该产品行的版本列以便确定是否有关该产品的信息发生了变化。
如果在环境中客户机应用程序可更新辅助服务器上的数据,请使用行版本控制来尽可能减少网络使用,特别是表中包含大量行的情况。否则,辅助服务器上的所有行将与主服务器上的所有行进行比较,以确定是否发生了更新。
要将行版本控制添加到现有表,可使用下列语法:
ALTER TABLE tablename add VERCOLS;
同样,您可以使用以下语法来删除表中的行版本控制:
ALTER TABLE tablename drop VERCOLS;
要创建带行版本控制的新表,可使用以下语法:
CREATE TABLE tablename (
Column Name Datatype
Column Name Datatype
Column Name Datatype
) with VERCOLS;
启用了行版本控制之后,每次更新行,ifx_row_version 都会递增 1;但是,Enterprise Replication 执行的行更新不会递增行版本。要使用 Enterprise Replication 更新服务器上的行版本,必须在复制参与者定义中包含 ifx_row_version 列。
使用高可用性集群备份和复原
大多数备份与复原操作都不能在辅助服务器上执行。
必须先在服务器上执行冷复原,然后才能将该服务器建立为 HAC(高可用性数据复制)或 RHAC(远程独立)辅助服务器。
将服务器设置为 HAC 或 RHAC 辅助服务器之后,只能执行以下备份与复原操作:
- 设置高可用性集群时,可在 HAC 或 RHAC 辅助服务器上执行逻辑复原。
- 可在 RHAC 辅助服务器上执行外部备份。有关更多信息,请参阅《GBase 8s 备份与复原指南》。
冷复原主服务器期间,必须关闭 SSC 辅助服务器,但是 SSC 辅助服务器在关闭并重新启动之后,可以在热复原期间在线。
更改数据库服务器方式
如果更改高可用性集群中数据库服务器的方式,复制将停止。
要更改数据库服务器方式,请使用 onmode 实用程序。
下表总结了更改主数据库服务器方式产生的影响。
表 1. 主数据库服务器上的方式更改
在主服务器上 | 在辅助服务器上 | 重新启动 HAC |
---|---|---|
脱机的任何方式 (onmode -k) | 辅助服务器显示:DR: Receive error。 HAC 关闭。 方式保持为只读。 如果 DRAUTO 设置为 0 (OFF),那么方式将保持为只读。 如果 DRAUTO 设置为 1 (RETAIN_TYPE),那么辅助服务器将切换为标准类型并且可以接受更新。(如果 DRAUTO 设置为 2 (REVERSE_TYPE),那么当旧的主服务器发生故障时,在连接结束时,辅助数据库服务器将立即成为主数据库服务器。) | 将其作为主服务器的故障一样来处理。根据在主数据库服务器脱机时您对辅助数据库服务器所进行的操作不同,可能有两种不同的情况: 请参阅以下部分以获取信息: ● 辅助服务器未更改为主服务器 ● 辅助服务器已自动更改为主服务器 请参阅主服务器发生故障时重新启动。 |
在线、静态或管理员 (onmode -s / onmode -u) (onmode -j ) | 辅助服务器不会接收到错误。 HAC 保持打开。 方式保持为只读。 | 在主服务器上使用 onmode -m。 |
下表总结了更改辅助数据库服务器方式产生的影响。
表 2. 辅助数据库服务器上的方式更改
在辅助服务器上 | 在主服务器上 | 重新启动 HAC |
---|---|---|
只读脱机 (onmode -k) | 主服务器显示:DR: Receive error。 HAC 关闭。 | 将其作为辅助服务器的故障一样来处理。请遵循辅助服务器发生故障时重新启动 HAC 或 RHAC 集群中的过程。 |
管理员模式在 HAC 辅助数据库服务器上的运行方式与其在主数据库服务器上运行的方式相同。
更改数据库服务器类型
您可以更改主数据库服务器或辅助数据库服务器的类型。
您可以更改主数据库服务器或辅助数据库服务器的类型。
仅当在辅助数据库服务器上关闭 HAC 时,您才能将数据库服务器类型从辅助更改为标准。当数据复制到主数据库服务器的连接断开或辅助数据库服务器上的数据复制失败时,关闭 HAC。当您使标准数据库服务器脱机并随后将其恢复在线时,它不会尝试连接至复制对中的另一数据库服务器。
使用以下命令切换类型:
- hdrmksec.[sh|bat] 和 hdrmkpri.[sh|bat] 脚本
要使用 hdrmkpri 和 hdrmksec 脚本切换数据库服务器类型,请执行以下操作:
- 关闭主数据库服务器 (ServerA):onmode -ky
- 在辅助数据库服务器 (ServerB) 在线时,运行 hdrmkpri.sh 脚本(在 UNIX™ 上)。现在 ServerB 是主数据库服务器。
- 对于 ServerA,运行 hdrmksec.sh 脚本(在 UNIX 上)。现在 ServerA 是辅助数据库服务器。
- 使 ServerB(主数据库服务器)在线。
还可以使用以下命令来切换服务器类型:
-
通过运行以下命令,将 ServerA 更改为主服务器:
onmode -d make primary ServerA
此命令将使 ServerA 成为主服务器,并将集群中的其他任何辅助服务器重定向为指向新的主服务器。 此命令还会关闭原有 HAC 主服务器 (ServerB),这是因为高可用性环境中只能存在一个主服务器。
-
通过运行以下命令将 ServerB 初始化为 HAC 辅助服务器:
-
在 UNIX 系统上:
$GBASEDBTDIR/bin/hdrmksec.sh ServerB
-
防止 HAC 服务器上的检查点阻塞
在 HAC 辅助服务器上,检查点处理必须等待缓冲池清仓完成。可在 HAC 辅助服务器上配置非阻塞检查点,这样在完成检查点处理之前,将把从主服务器发送的日志数据存储(也称为登台)到目录中。
可通过设置 LOG_STAGING_DIR 和 LOG_INDEX_BUILDS 配置参数,在 HAC 辅助服务器上配置非阻塞检查点。配置了非阻塞检查点之后,从主服务器发送的日志数据将登台到 LOG_STAGING_DIR 配置参数指定的目录中。HAC 辅助服务器完成检查点的处理后,将读取并应用登台区域内存储的日志数据。如果登台目录为空,HAC 辅助服务器将读取和应用从主服务器接收的日志数据。
可通过在 HAC 辅助服务器上设置 LOG_STAGING_DIR 配置参数,并同时在主服务器和 HAC 辅助服务器上设置 LOG_INDEX_BUILDS 来启用非阻塞检查点。LOG_INDEX_BUILDS 的值在主服务器和 HAC 辅助服务器上必须相同。
HAC 辅助服务器遇到检查点时,将进入缓冲方式。在缓冲方式中,辅助服务器把来自主服务器的任何日志页数据登台到登台目录内的文件中。
HAC 辅助服务器完成检查点处理后,将进入漏出方式。 在这种方式中,HAC 辅助服务器从登台文件读取数据,同时从主服务器接收新数据。登台区域为空之后,HAC 辅助服务器将恢复正常运行。
日志记录在 HAC 服务器上的存储位置
HAC 辅助服务器将在 LOG_STAGING_DIR 指定的目录内额外创建名为 ifmxhdrstage_## 的目录,其中 ## 是 SERVERNUM 指定的实例。这些目录用于存储处理检查点期间从主服务器发送的逻辑文件。 ifmxhdrstage_## 内的文件在不再需要时将清除。
非阻塞检查点与辅助服务器更新交互
必须注意辅助服务器更新与 HAC 辅助服务器上的非阻塞检查点之间的交互。如果 HAC 辅助服务器接收到更新请求,在该 HAC 辅助服务器处理相应的日志记录之前,将不应用更新。如果在 HAC 辅助服务器上启用了非阻塞检查点,可能会在辅助服务器上发生数据应用延迟,这是因为检查点处理导致日志文件在辅助服务器上登台。
查看 HAC 服务器上非阻塞检查点的统计信息
可使用 onstat 实用程序查看有关主服务器上和 HAC 辅助服务器上的非阻塞检查点的信息。
要查看有关登台日志的信息,请使用 onstat -g dri ckpt 命令。
有关 onstat -g ckpt 输出的示例,请参阅《GBase 8s 管理员参考》中有关 onstat 实用程序的信息。
监视 HAC 状态
监视数据库服务器的 HAC 状态以确定以下信息:
数据库服务器类型(主类型、辅助类型或标准类型)
复制对中另一数据库服务器的名称
HAC 是否打开
HAC 参数的值
命令行实用程序
每次运行 onstat 时显示的头信息均有字段指示数据库服务器正在作为主数据库服务器还是辅助数据库服务器运行。
以下示例为作为复制对中的主数据库服务器并且处于在线模式的数据库服务器显示头信息:
GBase 8s Database Server V8.5 -- online(Prim) -- Up 45:08:57
以下示例显示作为复制对中的辅助数据库服务器并且处于只读方式的数据库服务器:
GBase 8s Database Server V8.5 -- Read-Only (Sec) -- Up 45:08:57
以下示例显示不包含在 HAC 中的数据库服务器的标题。该数据库服务器的类型为标准类型。
GBase 8s Database Server V8.5 -- online -- Up 20:10:57
onstat -g dri 选项
要获得完整的 HAC 监视信息,请运行 onstat -g dri 选项。显示以下字段:
- 数据库服务器类型(主类型、辅助类型或标准类型)
- HAC 状态(打开或关闭)
- 成对的数据库服务器
- 最后一台 HAC 检查点
- HAC 配置参数的值
有关 onstat -g dri 输出的示例,请参阅《GBase 8s 管理员参考》。
oncheck -pr 选项
如果您的数据库服务器正在运行 HAC,那么保留页 PAGE_1ARCH 和 PAGE_2ARCH 将保存 HAC 用于同步主数据库服务器和辅助数据库服务器的检查点信息。以下示例中提供了相关 oncheck -pr 输出的示例。
Validating GBase 8s Database Server reserved pages - PAGE_1ARCH & PAGE_2ARCH
Using archive page PAGE_1ARCH.
Archive Level 0
Real Time Archive Began 01/11/95 16:54:07
Time Stamp Archive Began 11913
Logical Log Unique Id 3
Logical Log Position b018
DR Ckpt Logical Log Id 3
DR Ckpt Logical Log Pos 80018
DR Last Logical Log Id 3
DR Last Logical Log Page 128
SMI 表
sysdri 表提供了有关数据库服务器的高可用性数据复制状态的信息。
在 GBase 8s 管理员参考 中有关 sysmaster 数据库的这些主题中描述的 sysdri 表包含以下各列。
type
HAC 服务器类型
state
HAC 服务器状态
name
数据库服务器名
intvl
HAC 缓冲区清空时间间隔
timeout
网络超时
lostfound
HAC 失而复得的路径名
获取 RHAC 辅助服务器统计信息
使用 onstat 命令,显示有关 RHAC 辅助服务器的状态信息。 要显示 RHAC 辅助服务器的数量、有关已发送到 RHAC 辅助服务器的数据的信息,以及有关 RHAC 辅助服务器已确认接收的内容的信息,请使用 onstat -g rss 命令。
此命令具有显示有关单台服务器或多个辅助服务器的扩展信息的选项。 有关 onstat -g rss 输出的示例,请参阅《GBase 8s 管理员参考》中有关 onstat 实用程序的信息。
除去 RHAC 辅助服务器
可通过发出以下命令,从高可用性集群中除去 RHAC 辅助服务器:
onmode -d delete RSS rss_servername
RHAC 辅助服务器安全性
RS 辅助服务器支持与 HAC 类似的加密规则。请参阅加密 HAC 数据库服务器之间的数据通信以获取详细信息。
有关设置和配置服务器与 RHAC 辅助服务器之间加密的其他信息,请参阅服务器多路复用器组 (SMX) 连接。
创建或更改 RHAC 辅助服务器上的密码
可以为 RHAC 辅助服务器创建密码,以便在建立集群时,提供主服务器与辅助服务器之间的认证。密码是可选的。密码仅在主服务器和辅助服务器首次互连时有效。
密码可防止网络中的意外实例初始化和接受来自主服务器的事务数据。 密码与 gbasedbt 用户密码无关。
使用用于指定 RHAC 辅助服务器名称的相同命令创建密码。每个 RHAC 辅助服务器的名称和密码可在主服务器的 0 级备份之前或之后定义。
要设置 RHAC 辅助服务器名称和密码,请在主服务器上运行 onmode -d add RSS rss_servername password 命令。辅助服务器设置期间,在辅助服务器上运行 onmode -d RSS rss_servername password 命令时,请包含密码。
仅当服务器未连接到高可用性环境时,您才可以更改密码。尝试更改已连接的 RHAC 辅助服务器的密码将返回错误。
要在连接 RHAC 辅助服务器之前,更改该服务器上的密码,请在主服务器上使用 onmode -d change RSS password 命令。
示例
以下命令建立 RHAC 辅助服务器 ServerB 并使用密码 s#cure。
在主服务器上:
onmode -d add RSS ServerB s#cure
在辅助服务器上:
onmode -d RSS ServerB s#cure
以下命令将未连接到主服务器的 RHAC 辅助服务器 ServerB 的密码更改为 s@fest:
onmode -d change RSS ServerB s@fest
在集群故障转移期间完成事务
可在高可用性集群环境中配置服务器,以便在执行了主服务器故障转移之后继续处理事务。
失败的主服务器以外的任何服务器上运行的事务将继续运行。请配置集群环境,以便:
- 在辅助服务器上运行的事务不受影响。
- 在成为主服务器的辅助服务器上运行的事务不受影响。
- 在失败的主服务器上运行的事务将终止。
目前对智能大对象、XA 事务发生故障转移之后,以及在辅助服务器上运行 DDL 语句时发生故障转移之后,均不支持继续完成事务。
如果发生了故障转移,集群中的辅助服务器将临时暂挂正在运行的用户事务,直到新主服务器开始运行。故障转移之后,辅助服务器会将保存的事务重新发送到新的主服务器。新主服务器将恢复执行来自尚存的辅助服务器的事务。
运行分布式事务(跨多个数据库服务器的事务)时,出现故障时在主服务器上运行的任何事务都将终止。
不管故障转移是自动的(使用连接管理器)还是手动的(通过指定服务器来充当新主服务器),故障转移服务器都必须是具有集群中所有尚存服务器的最高级日志重放位置的服务器。如果故障转移服务器没有最高级日志重放位置,那么集群中的所有事务都将终止并回滚。
要实现最佳性能,请使用缺省的连接管理器故障转移配置:SDS+HAC+RHAC,0(请参阅连接管理)。
建议故障转移到 SSC 辅助服务器,因为主服务器和 SSC 辅助服务器从同一个物理磁盘读取数据。
如果故障转移服务器是 HAC 辅助服务器,那么 SSC 辅助服务器将关闭。
配置服务器以使事务在故障转移后完成
可使用 FAILOVER_TX_TIMEOUT 配置参数来配置高可用性集群中的服务器,以便在故障转移之后完成事务。
FAILOVER_TX_TIMEOUT 的值指示主服务器出现故障之后,回滚事务之前服务器等待的最大秒数。请在集群中所有服务器上都设置相同的 FAILOVER_TX_TIMEOUT 值。例如,要对事务完成指定 20 秒,请将 onconfig 文件中 FAILOVER_TX_TIMEOUT 配置参数的值设置为 20。
要禁用故障转移之后完成事务,请在集群中的所有服务器上将 FAILOVER_TX_TIMEOUT 配置参数设置为 0。
连接管理
可以使用连接管理器来监视和维护客户机连接,以及将客户机连接请求定向到连接单元中的适当服务器。
oncmsm 实用程序用于启动连接管理器,该管理器根据系统管理员配置的服务级别协议来管理并定向客户机连接请求。连接管理器提供负载均衡,并将客户机连接请求定向到一个或多个连接单元。连接单元是在网格、高可用性集群、复制集或服务器集配置中排列的一个或多个数据库服务器的集合。
表 1. 连接单元的类型和描述
连接单元类型 | 描述 |
---|---|
CLUSTER | 高可用性集群是由主服务器和一个或多个辅助服务器构成的一组数据库服务器。集群中的服务器是同类服务器,即所有服务器均使用相同的硬件和软件配置。主服务器上的数据将复制到所有辅助数据库服务器。 一个集群中至少包含一个主服务器和一个辅助服务器。集群中可以包含一个主服务器、一个 HAC 辅助服务器、零或更多个共享磁盘辅助服务器(SSC 服务器),以及零或多个远程独立辅助服务器(RHAC 服务器)。 |
REPLSET | 复制集是与 Enterprise Replication (ER) 链接的一组数据库服务器。ER 支持在按地理分布的数据库服务器上执行异步数据复制。可以使用 ER 复制整个数据库,也可以复制数据库与表的子集。使用 ER 链接的服务器可以是异类服务器;即这些服务器可能使用不同的硬件和软件配置。 复制定义复制参与者和数据的复制方法,而复制集则组合多个复制,以构成可作为一个单元来一起管理的集合。域是 ER 已知的所有服务器的集合。ER 域中的节点可包含高可用性集群,从而可以有由多个集群构成的集群。 |
GRID | 网格是 Enterprise Replication (ER) 域中的任意一组互连服务器,包括集群、复制集和服务器集。网格简化了大型数据库服务器组的管理。例如,在一台服务器上创建表时,将在网格内的所有服务器上创建该表,并且将自动同步数据。 |
SERVERSET | 服务器集是一台或一组由第三方复制应用程序管理的服务器。这种数据库服务器必须具有相同的数据库名称和模式,以便客户机应用程序连接。连接管理器仅对服务器集提供可用性和负载均衡。 |
连接管理器是一个守护程序,它接受来自客户机应用程序的连接请求,然后将客户机连接到数据库服务器。连接管理器从连接单元中的每台服务器收集工作负载统计信息,并将客户机连接定向到最合适的服务器。
当连接管理器必须在多台服务器中进行选择,以便连接客户机请求时,将根据系统管理员确定的预配置策略来决定要连接到哪台服务器。 指定的策略根据服务器数据等待时间、服务器故障状态或工作负载容量来定向连接请求。
连接管理器程序配置为使用 sqlhosts 文件,配置方法与 GBase 8s 数据库服务器相同。可以配置多个连接管理器实例,以便在连接管理器发生故障时,允许从一个连接管理器实例故障转移到另一个连接管理器实例。要避免连接管理器成为单个故障点,配置多个连接管理器实例尤为重要。有关配置多个连接管理器实例的示例,请参阅用于故障转移的连接管理器冗余。
因为连接单元可能包含以网格、高可用性集群、Enterprise Replication 复制集和服务器集形式排列的多台数据库服务器,所以客户机应用程序必须可以连接到服务器的任何成员。如果有大量服务器,可能难以确定要连接到哪台服务器。此外,也很难确定哪台服务器有足够的可用资源可用于执行给定任务。最后,难以(如果并非不可能)了解服务器何时可能遇到问题。使用连接管理器可解决这些问题。
连接管理器通过将客户机应用程序定向到活动量最少的服务器来均衡工作负载。连接管理器实用程序还执行故障转移仲裁。可以配置连接管理器,以确保在高可用性集群中的主服务器发生故障时,另一台服务器自动接管该主服务器的角色。
连接管理器执行三种角色:
- 基于规则的连接重定向
- 连接单元负载均衡
- 集群故障转移
基于规则的连接重定向
应用程序连接到连接管理器,正如连接到数据库服务器。应用程序连接到连接管理器时,将在通信层执行连接重定向,而应用程序无需执行其他任何操作。
为了配置连接管理器,将启动名为 oncmsm 的守护程序,该程序使用名为服务级别协议 (SLA) 的定制重定向规则。 连接管理器配置并初始化之后,将接受来自客户机应用程序的连接请求,并根据 SLA(重定向规则)将这些请求重定向到适当的服务器。
连接单元负载均衡
连接管理器可以执行负载均衡,其中重定向基于服务级别协议中设置的配置。连接管理器连接到每个连接单元中的每台服务器,并收集有关服务器类型、未使用的工作负载容量及服务器当前状态的统计信息。 根据这些信息,连接管理器能够将客户机连接重定向到可用容量最高的服务器。
使用 SLA 定义中的 POLICY 参数可为连接单元设置负载均衡策略。对于网格和复制集,必须启用数据质量 (QOD),才能利用 LATENCY、FAILURE 和 WORKLOAD 策略。如果未设置 QOD,或者如果未定义该策略,重定向策略将仅基于工作负载。
对于高可用性集群和服务器集,该策略仅基于工作负载。
自动故障转移
可以使用连接管理器配置自动故障转移。在高可用性集群中,如果连接管理器检测到主服务器发生故障,并且在确定超时周期期间主服务器未执行任何操作时,会将最合适的辅助服务器转换为主服务器。
使用连接管理器配置文件中的 FOC 选项可配置连接管理器故障转移参数。如果使用多个连接管理器来管理集群故障转移,可以通过在集群的主服务器上设置 HA_FOC_ORDER 配置参数来强制执行一致的故障转移策略。HA_FOC_ORDER 配置参数的值会替换连接到主服务器的每个连接管理器的配置文件中 FOC ORDER= 的值。
连接管理器监视连接单元中的服务器,并帮助客户机应用程序连接到最合适的服务器。然而,这些角色是独立的;连接管理器将客户机连接到服务器后,不会再重定向该客户机。 如果应用程序连接的数据库服务器遇到问题,那么应用程序必须再次通过连接管理器请求连接。
配置连接管理器的步骤
要配置连接管理器,必须设置加密的密码文件、服务级别协议和故障转移参数,并配置 sqlhosts 文件。
先决条件:
仅限 UNIX: 只有用户 gbasedbt 才能运行 oncmsm 命令。如果为用户 root 或 DBSA 组的成员授予了连接到 sysadmin 数据库的特权,那么用户 root 或 DBSA 组的该成员也可运行 oncmsm。
所有操作系统: 仅对于代理方式服务级别协议 (SLA),设置操作系统允许的最大文件描述符数(例如,在 UNIX™ 系统上通过使用 ulimit 进行设置)。
GBase 8s Client Software Development Kit (Client SDK) V3.50 或更高版本中随附了连接管理器。配置和使用连接管理器之前,必须安装 Client SDK。 请参阅《GBase 8s 客户机产品安装指南》。
要配置和启动连接管理器,请执行以下操作:
-
创建密码文件并将其加密。
-
设置 GBASEDBTDIR 环境变量。
-
在要运行连接管理器的计算机上创建连接管理器配置文件。
配置文件定义了连接管理器实例名称、服务级别协议和连接管理选项。
-
通过编辑 sqlhosts 文件(在 UNIX 上),为主服务器和所有 SLA 创建条目。
创建要由连接管理器使用的加密密码文件
如果连接单元中的任何服务器不属于安全网络环境,那么必须创建加密密码文件,以便连接管理器可创建与集群中的每台服务器的安全连接。
要创建加密的密码文件,请执行以下操作:
-
使用文本编辑器创建 ASCII 文本文件,其中包含集群内所有服务器的服务器名称、用户名和密码。
对于高可用性集群和 Enterprise Replication 域,如果要通过在 sqlhosts 文件中设置 s=6 选项来使用安全端口,并且客户机应用程序使用 DBSERVERALIASES 配置参数来指定备用数据库服务器名称列表,那么必须在密码文件中为这些安全端口定义备用服务器别名。
-
要保护加密文件,请指定密钥。
密钥可包含任何顺序的字符或数字,但是不得包含空格。
重要要在以后解密密码文件,必须提供用于加密该文件的相同密钥。
-
通过指定密钥名称和密码文件名称,使用 onpassword 实用程序加密密码文件:
onpassword -k key -e ./password_file
修改加密的密码文件
如果在连接单元中添加或除去了服务器,更改了密码或密钥,那么您可能希望修改加密的密码文件。
要编辑加密的密码文件,请执行以下操作:
-
通过指定密钥和密码文件名,使用 onpassword 实用程序对密码文件解密:
onpassword -k EncryptKey -d ./password_file
-
如果必要,请使用文本编辑器编辑该文件,以便执行必需的更改。
如果必要,确定一个新密钥。该密钥可包含任何字符或数字序列,但是不能包含空格。为了在以后解密密码文件,必须提供用于加密该文件的相同密钥。
-
通过指定密钥和密码文件名,使用 onpassword 实用程序对密码文件加密:
onpassword -k EncryptKey -e ./password_file
为连接管理器配置环境
启动连接管理器之前,GBASEDBTDIR 环境变量必须指向连接管理器的安装目录。
如果使用的是 UNIX™ C shell (csh),请使用 setenv 命令来设置该环境变量。对于其他 shell,请使用适合该 shell 的方法。
setenv GBASEDBTDIR path
要使用除 sqlhosts 以外的文件来指定连接管理器设置,请将 GBASEDBTSQLHOSTS 环境变量设置为该文件的名称。
修改连接管理器的 sqlhosts 文件
必须修改连接管理器的 sqlhosts 文件,才能定义网络连接信息。
连接管理器和数据库服务器实例在 sqlhosts 文件中以类似方法进行配置。sqlhosts 文件中的每个条目表示一个服务级别协议 (SLA) 名称或一个数据库服务器。
连接管理器需要连接到并监视的每台服务器都必须列在连接管理器 sqlhosts 文件中。 如果要监视高可用性集群,连接管理器 sqlhosts 文件必须包含主服务器和所有辅助服务器。
可以使用 GBASEDBTSQLHOSTS 环境变量来指定 sqlhosts 文件的位置。
-
编辑将要运行连接管理器的服务器上的 sqlhosts 文件。
-
添加一行,其中包含名称、网络类型、主服务器的主机名和服务名称,并为连接管理器需要管理的每个辅助服务器和每个 Enterprise Replication 服务器添加单独的行。
-
为每个服务级别协议名称添加一行。
例如,以下条目用于创建 SLA 名称 oltp 和 report:
#dbservername nettype hostname servicename options
oltp onsoctcp cmhost1 cmport1
report onsoctcp cmhost1 cmport3客户机通过连接管理器使用 SLA 名称连接到服务器。cmhost1 表示正在运行连接管理器的服务器名称。 cmport1 和 cmport3 是客户机连接到的端口。
为高可用性集群设置 sqlhosts、连接管理器和密码文件的示例
此示例显示如何为较小的高可用性集群设置连接管理器。
您有由以下三个服务器组成的高可用性集群配置:
- 主服务器
- HAC 辅助服务器
- SSC(共享磁盘)辅助服务器
您希望集群提供以下三种不同的服务来支持不同的应用程序:
- 联机事务处理 (OLTP),可以在主服务器上运行
- Payroll 服务,可以在 HAC 辅助服务器或主服务器上运行
- 报告服务,可以在 HAC 辅助服务器或 SSC 辅助服务器上运行
下图说明了连接管理器将客户机连接请求路由到相应服务器时所需的服务级别协议。
图: 连接管理器配置
连接管理器计算机和客户端计算机上的 sqlhosts 文件具有以下条目:
#dbservername nettype hostname servicename options
cluster_1 group - - i=10
ifx onsoctcp host1 port1 g=cluster_1
ifx_hdr onsoctcp host2 port2 g=cluster_1
ifx_sds onsoctcp host3 port3 g=cluster_1
oltp onsoctcp cmhost1 cmport1
report onsoctcp cmhost1 cmport2
payroll onsoctcp cmhost1 cmport3
每个数据库服务器上的 sqlhosts 文件具有以下条目:
#dbservername nettype hostname servicename options
ifx onsoctcp host1 port1
ifx_hdr onsoctcp host2 port2
Ifx_sds onsoctcp host3 port3
连接管理器的 sqlhosts 文件定义了一个名为 cluster_1 的服务器组。该服务器组已配置为确保在主服务器发生故障且重新启动了连接管理器时,连接管理器可以重新连接到集群。该服务器组包含可用作故障转移目标的所有服务器节点(ifx、ifx_hdr 和 ifx_sds)。
要配置和启动连接管理器,请执行以下操作:
-
创建密码文件并将其加密。对于此示例,请创建包含以下条目的文件 passwords.txt:
ifx ifx gbasedbt password1
ifx_hdr ifx_hdr gbasedbt password2
ifx_sds ifx_sds gbasedbt password3运行以下命令来加密该文件:
onpassword -k SecretKey -e ./passwords.txt
-
设置 GBASEDBTDIR 环境变量以指向安装了 Client SDK 的目录。
-
创建连接管理器配置文件。对于此示例,在要运行连接管理器的计算机上,创建包含以下条目的文件 cmconfig:
NAME cm_example
LOG 1
LOGFILE ${GBASEDBTDIR}/etc/cmlog
CLUSTER cluster_1
{
GBASEDBTSERVER ifx
SLA oltp DBSERVERS=primary
SLA payroll DBSERVERS=HDR,primary
SLA report DBSERVERS=SDS,HDR
FOC ORDER=ifx_sds,ifx_hdr \
TIMEOUT=10 \
RETRY=1
}此配置文件指定了以下信息和行为:
- 连接管理器实例的名称为 cm_example。
- 已启用日志记录。
- 日志文件的名称为 cmlog,并且该日志文件位于 $GBASEDBTDIR/etc 目录中。
- 连接管理器管理的是名为 cluster1 的集群。
- 连接管理器启动时,将在 sqlhosts 文件中搜索 ifx 条目,并连接到该数据库服务器。
- CONNECT TO @oltp 连接请求将定向到主服务器。
- CONNECT TO @payroll 连接请求将定向到 HAC 辅助服务器。如果 HAC 辅助服务器不可用,CONNECT TO @payroll 连接请求将定向到主服务器。
- CONNECT TO @report 连接请求将定向到 SSC 辅助服务器。如果 SSC 辅助服务器不可用,CONNECT TO @report 连接请求将定向到 HAC 辅助服务器。
- 如果主服务器发生故障,ifx_sds 会成为新的主服务器。如果 ifx_sds 不可用,ifx_hdr 会成为新的主服务器。
- 连接管理器再等待 10 秒,以等待有关连接单元的主服务器故障转移处理开始的事件。
- 连接管理器在主服务器的 HA_FOC_ORDER 配置参数指定的列表中循环 1 次后,自动故障转移将终止。
某些参数和属性不包含在此配置文件中,因此连接管理器具有以下缺省行为:
- 未设置 EVENT_TIMEOUT 参数,因此连接管理器将等待主服务器事件 60 秒,然后再开始故障转移处理。
- 未设置 SECONDARY_EVENT_TIMEOUT 参数,因此连接管理器将等待辅助服务器事件 60 秒,然后再与辅助服务器断开连接。
- 未设置 SQLHOSTS 参数,因此连接管理器将依次检查 ifx 的本地 sqlhosts 文件和远程 sqlhosts 文件以查找 ifx_sds 和 ifx_hdr 的实例。
- 未设置 SLA 参数的 WORKERS 属性,因此将为每个 SLA 分配四个工作程序线程。
-
编辑主服务器、HAC 辅助服务器和 SSC 辅助服务器上的 sqlhosts 文件:
#dbservername nettype hostname servicename options
ifx onsoctcp host1 port1
ifx_hdr onsoctcp host2 port2
ifx_sds onsoctcp host3 port3 -
在连接管理器计算机上和每个客户端计算机上,编辑 sqlhosts 文件:
#dbservername nettype hostname servicename options
cluster_1 group - - i=10
ifx onsoctcp host1 port1 g=cluster_1
ifx_hdr onsoctcp host2 port2 g=cluster_1
ifx_sds onsoctcp host3 port3 g=cluster_1
oltp onsoctcp cmhost1 cmport1
report onsoctcp cmhost1 cmport2
payroll onsoctcp cmhost1 cmport3 -
在连接管理器计算机上,通过运行 oncmsm 命令启动连接管理器:
oncmsm -c cmconfig
-
检查日志文件以验证连接管理器是否正确启动。
启动连接管理器
可以使用 oncmsm 实用程序来启动连接管理器。
要启动连接管理器,请运行以下命令:
- UNIX™
使用以下命令在 UNIX 系统上启动连接管理器:
oncmsm -c configuration_file
连接管理器配置文件的格式和示例
要设置连接管理器,您必须创建连接管理器配置文件。
大多数连接管理器选项是在配置文件中指定的。配置文件由两部分组成:
- 头,其中包含连接管理器配置选项,用于指定实例名称和其他可选参数。
- 主体,其中包含一个或多个连接单元部分,用于定义连接单元的类型和名称、服务级别协议、故障转移配置和故障转移警报程序。
以下代码块显示了连接管理器配置文件的格式:
# *** HEADER ***
NAME connection_manager_instance_name
# Optional Parameters
MACRO name_1=server_list_1
MACRO name_2=server_list_2
MACRO name_n=server_list_n
.
.
.
LOCAL_IP ip_list
LOG value
LOGFILE path_and_filename
DEBUG value
CM_TIMEOUT seconds
EVENT_TIMEOUT seconds
SECONDARY_EVENT_TIMEOUT seconds
SQLHOSTS value
# *** BODY ***
# Connection Unit 1unit_type unit_name_1
{
GBASEDBTSERVER server_list
SLA sla_name_1 DBSERVERS=value \
\
\ #Optional SLA Attributes
MODE=value \
USEALIASES=value \
POLICY=value \
WORKERS=number_of_threads \
HOST=host_name \
NETTYPE=network_protocol \
SERVICE=service_name \
SQLHOSTSOPT=options
SLA sla_name_2 DBSERVERS=value ...
SLA sla_name_n DBSERVERS=value ...
.
.
.
#Optional Failover Parameter and Attributes
FOC ORDER=value \
PRIORITY=value \
TIMEOUT=seconds \
RETRY=attempts
#Optional Failover Alarm Parameter
CMALARMPROGRAM path_and_filename
}
# Connection Unit 2unit_type unit_name_2
{
GBASEDBTSERVER server_list
SLA sla_name_1 DBSERVERS=value ...
SLA sla_name_2 DBSERVERS=value ...
SLA sla_name_n DBSERVERS=value ...
FOC ORDER=value ...
CMALARMPROGRAM path_and_filename
}
.
.
.
# Connection Unit nunit_type unit_name_n
{
GBASEDBTSERVER server_list
SLA sla_name_1 DBSERVERS=value ...
SLA sla_name_2 DBSERVERS=value ...
SLA sla_name_n DBSERVERS=value ...
FOC ORDER=value ...
CMALARMPROGRAM path_and_filename
}
为了提高可读性,请使用反斜杠 () 行接续字符来断开较长的配置文件行。以下示例显示了分成四行的宏定义:
MACRO srvlist=node1,node2,node3,node4, \
node5,node6,node7,node8, \
node9,node10,node11,node12, \
node13,node14,node15
连接管理器配置文件参数
下表列出了可以在连接管理器配置文件的不同部分中使用的参数。有关每个参数的更多信息,请访问表中该参数的链接。
表 1. 连接管理器配置文件参数
配置文件的组成部分 | 必需参数 | 可选参数 |
---|---|---|
头配置文件参数 | ● NAME | ● LOCAL_IP ● LOG ● LOGFILE ● DEBUG ● MACRO ● 连接单元类型和名称 ● CM_TIMEOUT ● EVENT_TIMEOUT ● SECONDARY_EVENT_TIMEOUT |
用于高可用性集群的主体 | ● SLA ● GBASEDBTSERVER ● FOC | ● CMALARMPROGRAM |
用于网格、复制集或服务器集的主体 | ● SLA ● GBASEDBTSERVER | ● CMALARMPROGRAM ● SQLHOSTS |
示例 1:用于高可用性集群的基本配置文件
NAME cm1
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm1.log
CLUSTER west
{
GBASEDBTSERVER ids_w1,ids_w2
SLA oltp DBSERVERS=primary
SLA report DBSERVERS=HDR,SDS
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=2
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
此示例针对高可用性集群配置了连接管理器,并定义了两个 SLA。
配置文件头定义了以下内容:
- cm1 定义为连接管理器实例的名称
- 已启用日志记录
- cm1.log 定义为日志文件的名称
- $GBASEDBTDIR/tmp 定义为日志目录
配置文件主体定义了两个 SLA、故障转移参数以及故障转移处理失败时要调用的程序:
- CONNECT TO @oltp 连接请求将定向到主服务器
- CONNECT TO @report 连接请求将定向到 HAC 辅助服务器。如果 HAC 辅助服务器不可用,CONNECT TO @report 连接请求将定向到任何可用的 SSC 辅助服务器。
- 主服务器的 HA_FOC_ORDER 配置参数值在故障转移规则中使用。
- 连接管理器再等待 5 秒,以等待有关连接单元的主服务器故障转移处理开始的事件。
- 连接管理器在主服务器的 HA_FOC_ORDER 配置参数指定的列表中循环 2 次后,自动故障转移将终止并生成警报。
- 如果故障转移处理遇到错误,将调用 $GBASEDBTDIR/etc/CMALARMPROGRAM.sh。
某些参数和属性不包含在此配置文件中,因此连接管理器具有以下缺省行为:
- 未设置 DEBUG 参数,因此将禁用调试。
- 未设置 EVENT_TIMEOUT 参数,因此连接管理器将等待主服务器事件 60 秒,然后再开始故障转移处理。
- 未设置 SECONDARY_EVENT_TIMEOUT 参数,因此连接管理器将等待辅助服务器事件 60 秒,然后再与辅助服务器断开连接。
- 未设置 CM_TIMEOUT 参数,因此在下一个可用连接管理器成为故障转移仲裁器之前,数据库服务器将等待 60 秒以从故障转移仲裁器连接管理器接收事件。
- 未设置 SQLHOSTS 参数,因此连接管理器将依次检查本地 sqlhosts 文件和远程 sqlhosts 文件以查找 ids_w1 和 ids_w2 的实例。
- 未设置 SLA 参数的 MODE 属性,因此连接管理器会将连接请求重定向到 oltp 和 report,而不是充当代理服务器。
- 未设置 report SLA 的 POLICY 属性,因此连接管理器会将连接请求定向到工作负载最低的辅助服务器。
- 未设置 SLA 参数的 WORKERS 属性,因此将为每个 SLA 分配四个工作程序线程。
- 未设置 SLA 参数的 HOST、NETTYPE、SERVICE 和 SQLHOSTSOPT 属性,因此连接管理器将使用 ids_w1 和 ids_w2 的 sqlhosts 值。
示例 2:用于多个连接单元类型的复杂配置文件
NAME cm2
MACRO NY=(ny1,ny2,ny3)
MACRO CA=(ca1,ca2,ca3)
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm2.log
CLUSTER west
{
GBASEDBTSERVER ids_w1,ids_w2
SLA oltpw DBSERVERS=primary
SLA reportw DBSERVERS=(HDR,SDS)
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=1
CMALARMPROGRAM /etc/CMALARMPROGRAM.sh
}
CLUSTER east
{
GBASEDBTSERVER ids_e1,ids_e2
SLA oltpe DBSERVERS=primary
SLA reporte DBSERVERS=RSS,HDR
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=1
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
REPLSET erset
{
GBASEDBTSERVER g_er1,g_er2
SLA repl1_any DBSERVERS=ANY
SLA repl1_ca DBSERVERS=${CA} \
POLICY=WORKLOAD
SLA repl1_ny DBSERVERS=${NY}
}
GRID grid1
{
GBASEDBTSERVER node1,node2,node3
SLA grid1_any DBSERVERS=ANY \
POLICY=LATENCY
SLA grid1_avail DBSERVERS=${NY},${CA}
}
GRID grid2
{
GBASEDBTSERVER node4,node5
SLA grid2_any DBSERVERS=ANY \
POLICY=LATENCY
SLA grid2_avail DBSERVERS=${CA},${NY}
}
SERVERSET ss
{
GBASEDBTSERVER ids1,ids2,ids3
SLA ssavail DBSERVERS=ids1,ids2,ids3 \
HOST=apollo \
SERVICE=9600 \
NETTYPE=onsoctcp
SLA ssany DBSERVERS=(ids1,ids2,ids3) \
HOST=apollo \
SERVICE=9610 \
NETTYPE=onsoctcp
}
此示例将连接管理器配置为支持两个高可用性集群、一个复制集、两个网格和一个服务器集。
配置文件头定义了以下内容:
- cm2 定义为连接管理器实例的名称
- 定义了两个宏
- NY,由 ny1、ny2 和 ny3 组成
- CA,由 ca1、ca2 和 ca3 组成
- 已启用日志记录
- cm2.log 定义为日志文件的名称
- $GBASEDBTDIR/tmp 定义为日志目录
配置文件主体定义了用于六个连接单元的服务级别协议和故障转移处理选项。配置文件头中定义的宏在某些 SLA 中使用。
某些参数和属性不包含在此配置文件中,因此连接管理器具有以下缺省行为:
- 未设置 DEBUG 参数,因此将禁用调试。
- 未设置 EVENT_TIMEOUT 参数,因此连接管理器将等待主服务器事件 60 秒,然后再开始故障转移处理。
- 未设置 SECONDARY_EVENT_TIMEOUT 参数,因此连接管理器将等待辅助服务器事件 60 秒,然后再与辅助服务器断开连接。
- 未设置 CM_TIMEOUT 参数,因此在下一个可用连接管理器成为故障转移仲裁器之前,数据库服务器将等待 60 秒以从故障转移仲裁器连接管理器接收事件。
- 未设置 SQLHOSTS 参数,因此连接管理器将依次检查本地 sqlhosts 文件和远程 sqlhosts 文件以查找数据库服务器实例。
连接管理器配置文件的参数要设置连接管理器,您必须创建连接管理器配置文件。
CMALARMPROGRAM 参数
指定在故障转移处理遇到错误时要运行的程序或脚本的路径和文件名。如果故障转移处理失败,那么连接管理器将调用 CMALARMPROGRAM 指定的程序。
在以下示例中,如果故障转移处理失败,将调用 cmalarmprogram.sh:
${GBASEDBTDIR}/etc/cmalarmprogram.sh
${GBASEDBTDIR} 是 GBASEDBTDIR 环境变量的值。
CM_TIMEOUT 参数
指定在下一个可用连接管理器成为故障转移仲裁器之前,数据库服务器等待从故障转移仲裁器连接管理器接收事件的秒数。 如果未指定 CM_TIMEOUT,超时为 60 秒。
DEBUG 参数
指定是启用还是禁用调试方式。
- 1 启用 SQL 和 ESQL/C 错误消息的日志记录。
- 0 禁用 SQL 和 ESQL/C 错误消息的日志记录。
如果连接管理器配置文件中未指定 DEBUG,将禁用调试方式。
不能从命令行启用调试方式。
EVENT_TIMEOUT 参数
指定连接管理器在开始故障转移处理之前,等待主服务器事件的秒数。主服务器事件由主服务器发出,用于表明该服务器仍在运行,如性能统计信息、节点更改或管理消息。
-
-1 表示连接管理器无限期等待来自主服务器的事件,或等到收到某个辅助服务器有关主服务器已脱机的通知为止。
-
值 0 到 30 会读取为 30。
如果连接管理器配置文件中未指定 EVENT_TIMEOUT,那么连接管理器在开始故障转移处理之前,将等待主服务器事件 60 秒。
FOC 参数和属性
指定连接管理器用于确定在主服务器发生故障时由哪台服务器进行接管的故障转移配置。FOC 参数对于连接单元类型 REPLSET、GRID 和 SERVERSET 无效。
重要: 如果指定了 FOC 参数并且故障转移处理开始,那么在故障转移处理完成之前,不能手动重新启动发生故障的主服务器。
表 1. FOC 参数的属性
FOC 参数的属性 | 描述 |
---|---|
ORDER | 指定服务器类型的逗号分隔列表,或指定服务器类型列表是否来自集群的主服务器的 HA*FOC_ORDER 配置参数。 要配置多个连接管理器实例来管理高可用性集群,请在主服务器的 onconfig 文件中设置 HA_FOC_ORDER 配置参数。 ● ENABLED 指定在故障转移仲裁时会考虑连接管理器,并使用主服务器的 HA_FOC_ORDER 配置参数值来确定节点故障转移顺序。 ● DISABLED 禁止连接管理器进行故障转移处理。如果禁用了故障转移处理,连接管理器将忽略故障转移请求。 ● HDR 指定高可用性数据复制辅助服务器。 ● RSS 指定远程独立辅助服务器 ● SDS 指定共享磁盘辅助服务器。 如果未指定 ORDER 属性,并且未设置主服务器的 HA_FOC_ORDER 配置参数,那么故障转移的顺序依次为 SDS、HDR 和 RSS。 重要: 如果 FOC 参数的 PRIORITY 属性设置为正整数,那么 ORDER 属性必须设置为 ENABLED。 |
PRIORITY | 指定在应用程序所在相同主机上或在高可用性集群中应用程序服务器上运行的连接管理器的故障转移优先级。PRIORITY 值必须为 0 或者正整数值,并且在配置为管理特定集群的所有连接管理器中必须是唯一的。 ● 0 指定在发生集群网络故障后禁用故障转移。如果活动的仲裁器连接管理器检测到主数据库服务器处于不活动状态,或者如果与主数据库服务器的连接丢失,那么该仲裁器连接管理器将开始故障转移。 ● 1 指定连接管理器具有最高优先级。 重要: 如果 PRIORITY 值设置为正整数,那么 FOC 参数的 ORDER 属性必须设置为 ENABLED。 如果未指定 PRIORITY 属性,那么在发生集群网络故障后将禁用连接管理器故障转移。 仅当优先级最高的连接管理器可以保持与新的主数据库服务器的有效连接时,才能执行故障转移。例如,如果 PRIORITY=2 的连接管理器尝试执行故障转移时,PRIORITY=1 的连接管理器与主数据库服务器的连接会丢失,那么将阻塞该故障转移请求。然而,如果 PRIORITY=1 的连接管理器尝试开始故障转移时,PRIORITY=2 的连接管理器与主数据库服务器的连接会丢失,那么将允许该故障转移请求继续。 |
RETRY | 指定连接管理器尝试完成故障转移期间,在 ORDER 属性值中循环的次数。在未成功故障转移的情况下达到 RETRY 限制后,将生成警报,并且连接管理器会终止自动执行的故障转移尝试。 ● 0 指示连接管理器无限期地继续故障转移处理。 ● 如果未指定 RETRY 属性,连接管理器将在 ORDER 属性值中循环一次。 |
TIMEOUT | 指定连接管理器在开始故障转移处理之前,再等待主服务器事件的秒数。 TIMEOUT 属性值在超出 EVENT_TIMEOUT 参数值后应用。例如,如果 EVENT_TIMEOUT 参数设置为 60,而 TIMEOUT 值设置为 10,那么必须在经过 70 秒都没有收到任何主服务器事件的情况下,才能开始故障转移。 如果未指定 TIMEOUT 属性,那么故障转移将在超出 EVENT_TIMEOUT 参数值指定的时间量后立即开始。 |
GBASEDBTSERVER 参数
指定初始化期间连接管理器连接到的数据库服务器。
LOCAL_IP 参数
指定运行连接管理器的计算机上要监视的 IP 地址。LOCAL_IP 参数与 FOC 参数的 PRIORITY 属性结合使用。必须列出要监视的每块网络接口卡的 IP 地址。
LOG 参数
为连接管理器方式指定日志记录。
- 0 指定不进行日志记录。
- 1 指定记录有关 PROXY 和 REDIRECT 服务级别协议的连接信息。
- 2 仅记录 PROXY 方式 SLA 信息,并指定记录客户机和连接管理器之间的数据发送和接收活动。
- 3 仅记录 PROXY 方式 SLA 信息,并指定记录客户机与连接管理器之间的数据内容。
如果未设置 LOG 参数,将禁用日志记录。
LOGFILE 参数
指定连接管理器日志文件的名称和位置。连接管理器启动时会显示该日志文件的路径和文件名,并且在连接管理器运行期间,该日志文件会持续更新状态信息。 该日志文件对于监视和故障诊断用途是必需的。
确保该日志文件的目录存在,并且已为启动连接管理器的用户启用对该文件的访问权。
如果未设置 LOGFILE 参数,连接管理器将在 $GBASEDBTDIR/tmp 目录中创建日志文件,名称为connection_manager_name.process_ID.log。
在以下示例中,cm.log 是连接管理器日志文件:
${GBASEDBTDIR}/tmp/cm.log
${GBASEDBTDIR} 是 GBASEDBTDIR 环境变量的值。
MACRO 参数
指定宏的名称和服务器名称列表。宏在用于 SLA 定义时将成为服务器名称列表。
例如,以下参数定义名为 CA 的宏,其中列出了三台服务器:
MACRO CA=ca1,ca2,ca3
通过用圆括号将服务器列表括起,可以在宏内定义负载均衡(其中连接基于所列数据库服务器的 CPU 使用率进行定向):
MACRO CA=(ca1,ca2,ca3)
MACRO 参数可以设置多次以创建多个宏。 例如:
MACRO NorthCA=ca1,ca2,ca3
MACRO SouthCA=ca4,ca5,ca6
NAME 参数
指定连接管理器实例的名称。 连接管理器实例的名称对于监视、关闭或重新装入连接管理器是必需的。如果未设置 NAME 参数,那么第一个 SLA 的名称将用作连接管理器实例名称。连接管理器实例名称必须唯一。
SECONDARY_EVENT_TIMEOUT 参数
指定连接管理器在与辅助服务器断开连接之前,等待辅助服务器事件的秒数。
- -1 表示连接管理器无限期等待来自辅助服务器的事件。
- 值 0 到 30 会读取为 30。
如果未设置 SECONDARY_EVENT_TIMEOUT 参数,超时将为 60 秒。
SLA 参数
SQLHOSTS 属性
客户机应用程序使用 SLA 名称连接到 DBSERVERS 属性值指定的数据库服务器或数据库服务器类型。对于每个 SLA,侦听器线程会安装在服务器上的指定端口处,用于检测入局客户机请求。SLA 参数可以在同一配置文件中多次指定;但是,每个 SLA 名称必须唯一。
在一些可选属性可以在 SLA 定义中进行设置:
-
每个 SLA 通常在 sqlhosts 文件中都有一个对应的条目;但是,用户可以改为通过设置 NETTYPE、HOST、SERVICE 和 SQLHOSTSOPT 属性,在 SLA 内部指定 sqlhots 信息。例如,可以在 SLA 中输入以下 sqlhosts 条目中的值:
#dbserver nettype hostname servicename options
oltp1 onsoctcp host_1 sales_1 csm=pathSLA 条目:
SLA oltp1 DBSERVERS=primary \
NETTYPE=onsoctcp \
HOST=host_1 \
SERVICE=sales_1 \
SQLHOSTSOPT="cms=path" -
MODE 属性指定连接请求是通过连接管理器传递,还是由连接管理器重定向。
-
POLICY 属性指定连接管理器如何确定选择列出的哪个数据库服务器来接收连接请求。
-
USEALIASES 属性指定连接管理器是否可以将客户机连接请求重定向到 DBSERVERALIASES 配置参数指定的数据库服务器。
表 2. SLA 参数的必需属性和值。
必需属性 | 值 |
---|---|
DBSERVERS | 指定服务器、服务器别名、服务器类型或先前定义的用于定向连接请求的宏。 用圆括号将列表括起可启用负载均衡,其中连接将定向到 CPU 利用率最低的服务器。 ● ANY 指定连接请求可以发送到任何可用的数据库服务器。 ● HDR 指定连接请求可以发送到高可用性数据复制服务器。 ● PRI 或 primary 指定连接请求可以发送到主数据库服务器。 ● SDS 指定连接请求可以发送到共享磁盘辅助服务器。 ● RSS 指定连接请求可以发送到远程独立辅助服务器。 ● 特定服务器名称或别名指定连接请求可以发送到具有该名称或别名的数据库服务器。 ● ${macro} 指定连接请求可以发送到配置文件头中的宏内所定义的数据库服务器。 |
表 3. SLA 参数的可选属性和值。
可选属性 | 值 |
---|---|
MODE | 指定连接请求是通过连接管理器传递,还是由连接管理器重定向。 ● PROXY 指定客户机连接将连接管理器用作代理服务器。客户机应用程序无法连接到位于防火墙后面的数据库服务器时,请使用代理方式。 由于代理服务器连接管理器将处理所有客户机请求,因此配置多个连接管理器实例可避免连接管理器成为单个故障点。 ● REDIRECT 指定客户机连接使用重定向方式,这将连接管理器配置为向客户机应用程序返回相应服务器节点、IP 地址和端口号。客户机应用程序使用连接管理器返回的 IP 地址和端口号来连接到数据库服务器。 如果未设置 MODE 属性,连接请求将由连接管理器重定向。 |
POLICY | 指定连接管理器如何定向客户机连接请求。指定 LATENCY 并不表示特定等待时间段;而是表示连接管理器将使用采用相对值的公式来确定将客户机连接请求定向到的位置。 ● LATENCY 指定连接管理器将连接请求定向到等待时间最短的服务器。 ● FAILURE 指定连接请求将定向到应用失败次数最少的服务器。 ● WORKLOAD 指定连接请求将定向到工作负载最低的服务器 如果未设置 POLICY 属性,连接管理器会将连接请求定向到工作负载最低的服务器。 可以为策略值提供相对权重。例如,要将客户机请求定向到等待时间最短且应用失败次数最少(但等待时间比应用失败次数重要 10 倍)的服务器,请使用以下值: POLICY=10*LATENCY+FAILURE 要使用等待时间和失败策略: ● 网格必须具有启用复制的表。 ● 必须启用数据质量 (qod) 监视。 |
USEALIASES | 指定连接管理器是否可以将客户机连接请求重定向到 DBSERVERALIASES 配置参数指定的数据库服务器别名。 ● ON 指定连接管理器可以将客户机连接请求定向到 DBSERVERS 属性指定的服务器别名。 ● OFF 指定连接管理器不将客户机连接请求定向到 DBSERVERS 属性指定的服务器别名。 如果未设置 USEALIASES 属性,连接管理器可以将客户机连接请求定向到 DBSERVERS 属性指定的服务器别名。 例如,数据库服务器 srv1 具有别名 srv1_alias1 和 svr1_alias2,并且连接管理器包含以下服务级别协议: SLA sla1 DBSERVERS=srv1 SLA sla2 DBSERVERS=srv1 \ USEALIASES=OFF SLA sla3 DBSERVERS=srv1_alias1 SLA sla4 DBSERVERS=srv1_alias1 \ USEALIASES=OFF 连接管理器将通过以下方式定向客户机请求: ● CONNECT TO @sla1 请求可以定向到 srv1、srv1_alias1 和 srv1_alias2。 ● CONNECT TO @sla2 请求将定向到 srv1。 ● CONNECT TO @sla3 请求可以定向到 srv1、srv1_alias1 和 srv1_alias2。 ● CONNECT TO @sla4 请求将定向到 srv1_alias1。 |
WORKERS | 指定分配给 SLA 的工作程序线程数。指定了服务级别协议时,连接管理器将创建 SLA 侦听器进程来拦截客户机连接请求。SLA 侦听器进程可以有一个或多个线程,称为工作程序线程。 如果未设置 WORKERS 属性,将为 SLA 分配 4 个工作程序线程。 表 4. SLA 参数的可选 SQLHOSTS 属性和值。 |
表 4. SLA 参数的可选 SQLHOSTS 属性和值。
可选 SQLHOSTS 属性 | 值 |
---|---|
HOST | 指定数据库服务器的主机。将使用 SLA 中的值,而不是 sqlhosts 文件中的值。 ● host_name 指定数据库服务器的主机名或主机别名。 ● ip_address 指定数据库服务器的 TCP/IP 地址。 |
NETTYPE | 指定数据库服务器的网络协议。将使用 SLA 中的值,而不是 sqlhosts 文件中的值。 ● onsoctcp 指定使用 TCP/IP 协议的套接字 |
SERVICE | 指定数据库服务器的端口号或服务名称。将使用 SLA 中的值,而不是 sqlhosts 文件中的值。 ● port_number 指定端口号。 ● service_name 指定服务名称。 |
SQLHOSTSOPT | 指定在 SLA 中所指定的数据库服务器的连接选项。用一对引号将所有连接选项括起。将使用 SLA 中的值,而不是sqlhosts 文件中的值。 |
SQLHOSTS 参数
要禁止客户机应用程序访问高可用性集群中的一个或多个数据库服务器时,SQLHOSTS 选项会很有用。
连接管理器可以使用本地计算机或远程计算机上的 sqlhosts 文件条目。
表 5. SQLHOSTS 连接管理器配置参数的值
SQLHOSTS 参数值 | 描述 |
LOCAL | 连接管理器在 GBASEDBTSQLHOSTS 环境变量指定的本地 sqlhosts 文件中搜索请求的数据库服务器实例。 |
REMOTE | 连接管理器在远程计算机上的 sqlhosts 文件中搜索请求的数据库服务器实例。远程计算机由本地数据库服务器的 GBASEDBTSQLHOSTS 环境变量指定。 远程计算机上的 sqlhosts 文件由远程数据库服务器的GBASEDBTSQLHOSTS 环境变量指定。 |
LOCAL+REMOTE(缺省值) | 连接管理器依次检查本地 sqlhosts 文件和远程 sqlhosts 文件以查找 GBase 8s 实例。 |
如果未设置 SQLHOSTS 参数,连接管理器将首先检查本地 sqlhosts 文件以查找 GBase 8s 实例。 如果找不到请求的服务器条目,那么将使用远程服务器上的 DBSERVERNAME 或 DBSERVERALIASES 配置参数。
例如,您有一个 Web 服务器(位于外部网络上)和一个应用程序服务器(位于内部网络上)。 数据库服务器为外部网络连接定义了 TCP/IP port1 和 port2,为内部连接定义了 TCP/IP port3 和 port4。指定 SQLHOSTS local 会使连接管理器只查找连接管理器实例的sqlhosts 文件中定义的服务器实例。在这种情况下,连接管理器只会将客户机连接请求定向到外部网络上的服务器。
unit_type
连接单元是特定的高可用性服务器配置。connection_unit_name 指定连接管理器识别连接单元所依据的名称。 在连接管理器配置文件中指定组类型和连接单元,以将客户机连接请求定向到相应的数据库服务器。每个名称在配置文件中必须唯一。
在配置文件中指定 CLUSTER 连接单元的名称时,请将与组名相同的名称用于 GBASEDBTSQLHOSTS 文件中的对应集群。
在连接管理器配置文件中指定连接单元名称时,只有 GRID 和 REPLSET 连接单元类型可以使用多字节字符。
连接管理器配置文件中服务级别协议的示例
以下示例显示了如何针对高可用性集群、复制集、网格和服务器集来配置各种服务级别协议 (SLA)。
在以下示例中,可以使用服务器别名或通用服务器类型。例如,RSS 指定连接管理器对集群中的每个 RHAC 辅助服务器进行评估,以确定客户机应用程序请求的最佳候选项。您还可以指定数据库服务器的网络别名,例如 sds1 或 rss1。
以下配置文件示例显示了各种选项:
示例 1:从服务级别协议进行连接请求重定向
NAME cm1
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm1.log
CLUSTER east
{
GBASEDBTSERVER ids_e1,ids_e2
SLA secondaryNodes DBSERVERS=SDS,HDR,PRI
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=1
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
连接管理器 cm1 按如下所示定向 CONNECT TO @secondaryNodes 连接请求:
连接到任何可用 SSC 辅助服务器。
如果 SSC 辅助服务器不可用,那么连接到 HAC 辅助服务器。
如果 HAC 辅助服务器不可用,那么连接到主服务器。
示例 2:指定多个服务级别协议
NAME cm2
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm2.log
CLUSTER west
{
GBASEDBTSERVER ids_w1,ids_w2
SLA oltp DBSERVERS=primary
SLA report DBSERVERS=HDR,SDS
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=2
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
此示例针对高可用性集群配置了连接管理器,并定义了两个 SLA。
配置文件主体定义了两个 SLA、故障转移参数以及故障转移处理失败时要调用的程序:
CONNECT TO @oltp 连接请求将定向到主服务器
CONNECT TO @report 连接请求将定向到 HAC 辅助服务器。如果 HAC 辅助服务器不可用,CONNECT TO @report 连接请求将定向到任何可用的 SSC 辅助服务器。
示例 3:服务级别协议中的负载均衡
要启用服务器间的负载均衡,请用圆括号将服务器类型列表括起。
NAME cm3
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm3.log
CLUSTER south
{
GBASEDBTSERVER ids_s1,ids_s2
SLA secondary DBSERVERS=(SDS,HDR)
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=1
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
连接管理器 cm3 将客户机 CONNECT TO @secondary 连接请求定向到 CPU 利用率最低的 SSC 或 HAC 辅助服务器。
示例 4:服务级别协议中的代理和重定向方式
在重定向方式下,连接管理器将指定数据库服务器的 IP 地址和端口号发送到客户机应用程序。 然后客户机应用程序使用此 IP 地址和端口号来连接到数据库服务器。在代理方式下,客户机请求将通过连接管理器进行路由。如果未指定 SLA 方式,重定向方式是缺省方式。
NAME cm4
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm4.log
CLUSTER north
{
GBASEDBTSERVER ids_n1,ids_n2
SLA sla1 DBSERVERS=alpha \
MODE=REDIRECT
SLA sla2 DBSERVERS=beta \
MODE=PROXY
SLA sla3 DBSERVERS=SDS \
MODE=REDIRECT
FOC ORDER=ENABLED \
TIMEOUT=5 \
RETRY=1
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
对于此示例:
主服务器的别名为 alpha
HAC 辅助服务器的别名为 beta
有两个 SSC 辅助服务器,别名为 gamma1 和 gamma2
连接管理器 cm4 按如下所示定向客户机连接请求:
CONNECT TO @sla1 连接请求将定向到主服务器 (alpha)。
CONNECT TO @sla2 连接请求将通过连接管理器(充当代理服务器)定向到 HAC 辅助服务器 (beta)。
CONNECT TO @sla3 连接请求将定向到可用资源最多的 SSC 辅助服务器。
示例 5:主服务器、辅助服务器和连接管理器的超时
NAME cm5
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm5.log
CM_TIMEOUT 300
EVENT_TIMEOUT 45
SECONDARY_EVENT_TIMEOUT 50
CLUSTER southwest
{
GBASEDBTSERVER ids_sw1,ids_sw2
SLA oltp DBSERVERS=primary
MODE=PROXY
SLA report DBSERVERS=SDS,RSS,HDR
SLA primary DBSERVERS=primary
SLA secondary DBSERVERS=(SDS,RSS,HDR)
FOC ORDER=ENABLED \
RETRY=1
CMALARMPROGRAM ${GBASEDBTDIR}/etc/CMALARMPROGRAM.sh
}
如果数据库服务器在 300 秒内未接收到来自连接管理器的任何事件,该数据库服务器将假定连接管理器未运行,而下一个可用的连接管理器将成为故障转移仲裁器。
如果连接管理器在 45 秒内未接收到来自主服务器的任何事件,那么连接管理器将开始故障转移处理。如果为某个连接单元定义了 FOC 参数的 TIMEOUT 属性,那么该参数的值会与 EVENT_TIMEOUT 参数的值相加,所得结果作为该连接单元的故障转移处理开始之前要等待的总时间。
如果连接管理器在 50 秒内未接收到来自辅助服务器的任何事件,那么连接管理器将与该辅助服务器断开连接。
- CONNECT TO @oltp 连接请求将通过连接管理器(充当代理服务器)定向到主服务器。
- CONNECT TO @report 连接请求将定向到第一个可用的 SSC 辅助服务器。如果 SSC 辅助服务器不可用,CONNECT TO @report 连接请求将发送到任何可用的 RHAC 辅助服务器。如果 RHAC 辅助服务器不可用,那么 CONNECT TO @report 连接请求将发送到 HAC 辅助服务器。
- CONNECT TO @primary 连接请求将定向到主服务器。
- CONNECT TO @secondary 连接请求将通过负载均衡定向到可用资源最多的辅助服务器。
示例 6:服务级别协议中的宏和工作负载均衡
可以为服务器组定义宏。可以在宏内或 SLA 内定义负载均衡。
NAME cm6
MACRO NY=(ny1,ny2,ny3)
MACRO CA=(ca1,ca2,ca3)
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm6.log
REPLSET erset
{
GBASEDBTSERVER g_er1,g_er2
SLA repl1_any DBSERVERS=ANY
SLA repl1_ca DBSERVERS=${CA}
SLA repl1_ny DBSERVERS=${NY}
}
在此示例中,定义了两个宏:
- NY,由 ny1、ny2 和 ny3 组成,并使用工作负载均衡。
- CA,由 ca1、ca2 和 ca3 组成,并使用工作负载均衡。
- 连接管理器 cm6 按如下所示定向客户机连接请求:
- CONNECT TO @repl1_any 连接请求将定向到任何可用的服务器。
- CONNECT TO @repl1_ca 连接请求将定向到 ca1、ca2 或 ca3 中 CPU 利用率最低者。
- CONNECT TO @repl1_ny 连接请求将定向到 ny1、ny2 或 ny3 中 CPU 利用率最低者。
示例 7:服务级别协议中的重定向策略
NAME cm7
MACRO SF=(sf1,sf2,sf3)
MACRO LA=(la1,la2,la3)
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm7.log
GRID grid1
{
GBASEDBTSERVER node1,node2,node3
SLA grid1_any DBSERVERS=ANY
POLICY=LATENCY
SLA grid1_avail DBSERVERS=${SF},${LA}
}
在此示例中,定义了两个宏:
- SF,由 sf1、sf2 和 sf3 组成,并使用工作负载均衡。
- LA,由 la1、la2 和 la3 组成,并使用工作负载均衡。
连接管理器 cm7 按如下所示定向客户机连接请求:
- CONNECT TO @grid1_any 连接请求可以定向到任何可用的服务器。连接请求将定向到等待时间最短的服务器。
- CONNECT TO @grid1_avail 连接请求将定向到 sf1、sf2 或 sf3 中 CPU 利用率最低者。如果 sf1、sf2 和 sf3 不可用,连接请求将发送到 la1、la2 或 la3 中 CPU 利用率最低者。
示例 8:服务级别协议中的 sqlhosts 连接信息
NAME cm8
LOG 1
LOGFILE ${GBASEDBTDIR}/tmp/cm8.log
SERVERSET ss
{
GBASEDBTSERVER ids1,ids2,ids3
SLA ssavail DBSERVERS=ids1,ids2,ids3 \
HOST=apollo \
SERVICE=9600 \
NETTYPE=onsoctcp
SLA ssany DBSERVERS=(ids1,ids2,ids3) \
HOST=apollo \
SERVICE=9610 \
NETTYPE=onsoctcp
}
此示例显示了支持连接管理器所支持的服务器集的示例配置。连接管理器使用 HOST、SERVICE 和 NETTYPE 属性的值,而不是服务器的 sqlhosts 文件中的值。
对于 ssavail SLA,ids1、ids2 和 ids3 具有以下 sqlhosts 信息:
#dbservername nettype hostname servicename options
ids1 onsoctcp apollo 9600
ids2 onsoctcp apollo 9600
ids3 onsoctcp apollo 9600
对于 ssany SLA,ids1、ids2 和 ids3 具有以下 sqlhosts 信息:
#dbservername nettype hostname servicename options
ids1 onsoctcp apollo 9610
ids2 onsoctcp apollo 9610
ids3 onsoctcp apollo 9610
连接管理器 cm8 按如下所示定向客户机连接请求:
- CONNECT TO @ssavail 连接请求将定向到 ids1。如果 ids1 不可用,CONNECT TO @ssavail 连接请求将发送到 ids2。如果 ids2 不可用,CONNECT TO @ssavail 连接请求将发送到 ids3。
- CONNECT TO @ssany 连接请求将定向到 ids1、ids2 或 ids3 中 CPU 利用率最低者。
连接管理器服务级别协议中故障转移配置的示例
以下示例显示了由连接管理器执行的故障转移的配置示例。
以下示例显示了将连接管理器配置为在原始主服务器遇到问题时将辅助服务器提升为主服务器的多种方法。每个服务级别协议 (SLA) 都应该定义故障转移配置。
如果使用多个连接管理器来管理集群的故障转移,请在集群的主服务器上设置 HA_FOC_ORDER 配置参数。HA_FOC_ORDER 配置参数的值会替换连接到主服务器的每个连接管理器的配置文件中 FOC ORDER= 的值。
对于以下示例,所有服务器上的 HA_FOC_ORDER 配置参数都是缺省值 SDS,HDR,RSS(依次为共享磁盘辅助服务器、高可用性数据复制辅助服务器和远程独立辅助服务器)。
示例 1:立即故障转移
FOC ORDER=ENABLED TIMEOUT=0
在此示例中,指定了以下行为:
- 如果连接管理器检测到主服务器因在 EVENT_TIMEOUT 值指定的时间量内未发生任何主服务器事件而脱机,那么由于 TIMEOUT 值设置为 0,因此故障转移处理将立即启动。
- 连接管理器首先尝试将最适合的 SSC 服务器转换为主服务器。如果没有任何 SSC 服务器在线,那么连接管理器会尝试将 HAC 服务器转换为主服务器。 如果 HAC 服务器未在线,那么连接管理器会尝试将最适合的 RHAC 服务器转换为主服务器。
- 由于未指定 RETRY 属性,因此连接管理器将在 ORDER 属性值中循环一次。
示例 2:包含延长的超时的故障转移
FOC ORDER=ENABLED TIMEOUT=10
在此示例中,指定了以下行为:
- 如果连接管理器检测到主服务器因在 EVENT_TIMEOUT 值指定的时间量内未发生任何主服务器事件而脱机,那么 TIMEOUT 值会使连接管理器再等待 10 秒,以等待主服务器恢复在线,然后才能开始故障转移处理。
- 故障转移处理期间,连接管理器首先尝试将最适合的 SSC 服务器转换为主服务器。如果没有任何 SSC 服务器在线,那么连接管理器会尝试将 HAC 服务器转换为主服务器。 如果 HAC 服务器未在线,那么连接管理器会尝试将最适合的 RHAC 服务器转换为主服务器。
- 由于未指定 RETRY 属性,因此连接管理器将在 ORDER 属性值中循环一次。
示例 3:包含延长的超时、重试和警报的故障转移
FOC ORDER=ENABLED TIMEOUT=20 RETRY=2
CMALARMPROGRAM ${GBASEDBTDIR}/etc/cmalarmprogram.sh
在此示例中,指定了以下行为:
- 如果连接管理器检测到主服务器因在 EVENT_TIMEOUT 值指定的时间量内未发生任何主服务器事件而脱机,那么 TIMEOUT 值会使连接管理器再等待 20 秒,以等待主服务器恢复在线,然后才能开始故障转移处理。
- 故障转移处理期间,连接管理器首先尝试将最适合的 SSC 服务器转换为主服务器。如果没有任何 SSC 服务器在线,那么连接管理器会尝试将 HAC 服务器转换为主服务器。 如果 HAC 服务器未在线,那么连接管理器会尝试将最适合的 RHAC 服务器转换为主服务器。
- 连接管理器在等待成功完成故障转移期间,最多会在 ORDER 列表 SDS,HDR,RSS 中循环两次。
- 如果在 ORDER 列表中循环两次后,故障转移仍未完成,那么将调用 cmalarmprogram.sh 程序来生成警报,并且连接管理器会终止故障转移。
连接管理器代理方式和重定向方式
连接管理器可以重定向客户机连接请求或充当代理服务器并处理所有客户机/服务器通信。
使用服务级别协议 MODE=REDIRECT 或 MODE=PROXY 属性可指定连接管理器如何处理客户机连接请求。
图: 在服务级别协议中设置重定向方式
在重定向方式下,连接管理器将相应服务器节点、IP 地址和端口号返回给发出连接请求的客户机应用程序。然后,客户机应用程序使用连接管理器提供的 IP 地址和端口号来连接到指定的数据库服务器。
图: 服务级别协议中的 MODE=PROXY
在代理方式下,连接管理器充当代理服务器,并管理客户机与数据库服务器的通信。当客户机应用程序无法连接到位于防火墙后面的数据库服务器时,请使用代理方式。要避免连接管理器成为单个故障点,在使用代理方式时,请配置多个连接管理器实例。
用于故障转移的连接管理器冗余
要防止连接管理器成为单个故障点,必须在不同计算机上配置连接管理器的多个实例。
连接管理器可以安装在未运行 GBase 8s 数据库服务器实例的计算机上,以防止连接管理在某个数据库服务器发生故障时发生故障。此外,还可以配置多个连接管理器实例,并使用 sqlhosts 故障转移功能来进一步提高可用性。
如果连接管理器服务级别协议使用的是重定向方式,那么在连接管理器发生故障后,客户机仍将保持与数据库服务器的连接;但是,除非配置了备份连接管理器实例,否则无法建立新客户机连接。如果连接管理器服务级别协议使用的是代理方式,那么连接管理器将充当代理服务器,并路由与指定数据库服务器的所有客户机通信。 如果代理服务器连接管理器发生故障,那么所有客户机连接都将丢失。
下图显示了其中包含两个连接管理器实例的高可用性集群示例。
图: 连接管理器组配置
主服务器和辅助服务器上的 sqlhosts 文件配置如下:
#dbservername nettype hostname servicename options
ifx_cluster group - - i=30
ifx_pri onsoctcp p_machine ifxsrv0pri g=ifx_cluster
ifx_sds onsoctcp sds_machine ifxsrv0sds g=ifx_cluster
ifx_hdr onsoctcp hdr_machine ifxsrv0hdr g=ifx_cluster
ifx_rss onsoctcp rss_machine ifxsrv0rss g=ifx_cluster
sqlhosts 文件配置了一个其中包含集群内的每台服务器的服务器组,名称为 ifx_cluster。
运行连接管理器的服务器上和客户端计算机上的 sqlhosts 文件按如下所示进行配置:
#dbservername nettype hostname servicename options
ifx_pri onsoctcp p_machine ifxsrv0pri
# ifx_cm group
ifx_cm group - - c=1
ifx_cm1 onsoctcp cm1_machine cm1_port1 g=ifx_cm
ifx_cm2 onsoctcp cm2_machine cm2_port2 g=ifx_cm
# ifx_proxy group
ifx_proxy group - - c=1
ifx_proxy1 onsoctcp cm1_machine cm1_proxy1 g=ifx_proxy
ifx_proxy2 onsoctcp cm2_machine cm2_proxy2 g=ifx_proxy
sqlhosts 文件中的条目指定以下行为:
- ifx_pri 是指定给主服务器的名称,这样发送到 ifx_pri 的客户机连接请求将定向到主服务器。
- ifx_cm 条目定义了由两个服务级别协议 ifx_cm1 和 ifx_cm2 构成的组。c=1 选项使客户机应用程序选择用于连接到服务器或服务级别协议列表的随机起点。 发送到 ifx_cm 的客户机连接请求将定向到 ifx_cm1 或 ifx_cm2。如果其中一个连接管理器实例脱机,那么客户机请求将自动路由到在线实例。
- ifx_proxy 条目还定义了由两个服务级别协议 ifx_proxy1 和 ifx_proxy2 构成的组。 发送到 ifx_proxy 的客户机连接请求将定向到 ifx_proxy1 或 ifx_proxy2。如果其中一个连接管理器实例脱机,那么客户机请求将自动路由到在线实例。
如果由于 ifx_cm2 处于脱机状态或被随机选中而导致发送到 ifx_cm 的客户机连接请求定向到 ifx_cm1,那么 sqlhosts 文件会将该请求定向到正在 cm1_machine 上运行的连接管理器实例。与此类似,对 ifx_cm2 的请求也会定向到正在 cm2_machine 上运行的连接管理器实例。发送到 ifx_proxy 的连接请求将以同样方式发送到 cm1_machine 或 cm2_machine 上的连接管理器实例。
由于 ifx_cm1、ifx_cm2、ifx_proxy1 和 ifx_proxy2 是服务级别协议而不是数据库服务器,因此客户机请求将根据连接管理器配置文件中定义的服务级别协议重定向策略来定向。
下表中显示了第一个连接管理器实例 ifx_cm1 的配置文件:
NAME ifx_cm1
LOG 1
LOGFILE ${GBASEDBTDIR}/usr2/logs/cm1.log
CLUSTER my_cluster1
{
GBASEDBTSERVER=ifx_pri,ifx_sds,ifx_rss,ifx_hdr
SLA ifx_cm1 DBSERVERS=(SDS,HDR),RSS,primary
SLA ifx_proxy1 DBSERVERS=HDR,RSS,primary \
MODE=PROXY
FOC ORDER=ENABLED /
TIMEOUT=5
}
此连接管理器配置文件指定了以下信息和行为:
- 连接管理器实例的名称为 ifx_cm1。
- 已启用日志记录,并且 cm1.log 日志文件位于 {GBASEDBTDIR} 是 GBASEDBTDIR 环境变量的值。
- 连接单元是名为 my_cluster1 的高可用性集群。
- 初始化期间,连接管理器连接到 ifx_pri、ifx_sds、ifx_rss 和 ifx_hdr。
- CONNECT TO @ ifx_cm1 连接请求将定向到 SSC 辅助服务器或 HAC 辅助服务器,具体取决于哪个数据库服务器的 CPU 使用率最低。如果 SSC 辅助服务器和 HAC 辅助服务器均不可用,CONNECT TO @ ifx_cm1 连接请求将定向到 RHAC 辅助服务器。如果 RHAC 辅助服务器不可用,CONNECT TO @ ifx_cm1 连接请求将定向到主服务器。
- CONNECT TO @ ifx_proxy1 连接请求将连接管理器用作代理服务器。CONNECT TO @ ifx_proxy1 连接请求将定向到 HAC 辅助服务器。如果 HAC 辅助服务器不可用,CONNECT TO @ ifx_proxy1 连接请求将定向到 RHAC 辅助服务器。如果集群中包含多个 RHAC 辅助服务器,那么客户机请求将定向到工作负载最低的 RHAC 辅助服务器。如果 RHAC 辅助服务器不可用,客户机请求将路由到主服务器。
- 主服务器上 HA_FOC_ORDER 配置参数的值用于故障转移顺序配置。对于此示例,HA_FOC_ORDER 配置参数设置为其缺省值 SDS,HDR,RSS。
- 如果主服务器发生故障,SSC 辅助服务器会成为主服务器。如果 SSC 辅助服务器不可用,HAC 辅助服务器会成为主服务器。如果 HAC 辅助服务器不可用,RHAC 辅助服务器会成为主服务器。
- 如果主服务器发生故障,那么连接管理器必须在经过了 EVENT_TIMEOUT 和服务级别协议 TIMEOUT 值之和所表示的时间之后,才能将辅助服务器提升为主服务器。EVENT_TIMEOUT 参数的缺省值为 60 秒,因此必须在经过 65 秒都没有主服务器事件的情况下,才能将辅助服务器提升为主服务器。
下表中显示了第二个连接管理器实例 ifx_cm2 的配置文件:
NAME ifx_cm2
LOG 1
LOGFILE ${GBASEDBTDIR}/usr2/logs/cmsm2.log
CLUSTER my_cluster2
{
GBASEDBTSERVER=ifx_pri,ifx_sds_ifx_rss,ifx_hdr
SLA ifx_cm2 DBSERVERS=(SDS,HDR),RSS,primary
SLA ifx_proxy2 DBSERVERS=HDR,RSS,primary \
MODE=PROXY
FOC ORDER=ENABLED \
TIMEOUT=5
}
配置多个连接管理器实例时,请确保每个连接管理器实例的服务级别协议 (SLA) 的定义完全相同。SLA 定义完全相同可确保无论使用哪个连接管理器实例,客户机都具有相同的重定向策略。除了 SLA 名称、集群名称和日志文件名之外,这两个配置文件完全相同。使用组名可确保即便其中一个连接管理器实例脱机,客户机也可连接到有效的连接管理器实例。sqlhosts 文件确保将发送到 ifx_cm 和 ifx_proxy 的请求定向到正确的连接管理器实例。如果连接管理器实例位于不同计算机上(如此示例中所示),那么不必严格要求使用不同的日志文件名。但是,如果连接管理器实例位于同一台计算机上,请使用不同的日志文件名或目录。
-
如果连接管理器配置文件位于 $GBASEDBTDIR/etc 目录中,并且名为 cm1_machine.cfg,请在 cm1_machine 上运行以下命令来启动连接管理器实例:
oncmsm -c $GBASEDBTDIR/etc/cm1_machine.cfg
-
如果连接管理器配置文件位于 $GBASEDBTDIR/etc 目录中,并且名为 cm2_machine.cfg,请在 cm2_machine 上运行以下命令来启动连接管理器实例:
oncmsm -c $GBASEDBTDIR/etc/cm2_machine.cfg
连接管理器网络监视和数据库服务器故障转移优先级
通过配置“连接管理器”以在发生网络故障时进行故障转移,可以确保应用程序服务器保持与数据库服务器的连接。
可以针对两种不同的情况配置数据库服务器故障转移:
- 当主服务器变得无法运行时
- 当应用程序服务器丢失与主服务器的网络连接时
以下示例是由一个应用程序服务器和带有一个 SSC 辅助服务器的一个主服务器组成的网络。 每个数据库服务器都配置了两块网络接口卡 (NIC),因此每个数据库服务器都有两个 TCP/IP 地址。
图: 应用程序服务器和数据库服务器之间的网络连接
如果发生网络故障,并且应用程序服务器无法连接到主服务器,但可以连接到辅助服务器,那么在启用了网络监视的情况下,主服务器会故障转移到辅助服务器。
网络监视是通过设置 LOCAL_IP 参数和 FOC 参数的 PRIORITY 属性来启用的:
- LOCAL_IP 参数列出了运行连接管理器的计算机上 NIC 卡的可用 TCP/IP 地址。
- FOC 参数的 PRIORITY 属性用于配置在应用程序所在相同主机上或在高可用性集群中应用程序服务器上运行的连接管理器的故障转移优先级。
可为集群指定优先级,以防止因故障转移而丢失网络连接。如果连接管理器的 PRIORITY 属性设置为正整数,那么连接管理器将执行本地 IP 地址和其他集群计算机之间的网络监视。
PRIORITY 值在配置为管理特定集群的所有连接管理器之间必须是唯一的。如果 PRIORITY 值设置为正整数,那么 FOC 参数的 ORDER 属性必须设置为 ENABLED。
例如,在包含两个应用程序服务器的配置中,多个网络故障可能引起冲突,即故障转移到辅助数据库服务器会导致其中一个应用程序服务器丢失与数据库服务器的连接。由于故障转移会导致其中一个应用程序服务器丢失数据库连接,因此会产生冲突。
要解决这种情况,请在连接管理器配置的过程中设置每个应用程序服务器的优先级。如果为一个应用程序服务器配置的优先级高于另一个应用程序服务器,并且故障转移将导致丢失与优先级较低的应用程序服务器的连接,那么将允许数据库服务器的故障转移。如果故障转移导致丢失与优先级较高的应用程序服务器的连接,那么将不允许发生故障转移。
要监视连接管理器与数据库服务器之间的网络连接,连接管理器必须在与应用程序服务器相同的计算机上运行。
将连接管理器配置为在网络故障期间保持连接
要确保应用程序服务器保持与数据库服务器的连接,可以将连接管理器配置为在发生网络故障时启动故障转移。
- 连接管理器必须在应用程序服务器上运行。
- 必须至少有一个共享主服务器磁盘的 SSC 辅助服务器。
要配置网络监视:
-
如有必要,在每个应用程序服务器上至少安装两块网络接口卡 (NIC)。
-
在每个应用程序服务器上执行以下步骤:
a. 安装连接管理器软件。
b. 在 sqlhosts 文件中创建数据库服务器和所有 SLA 的条目。
c. 如有必要,使用 onpassword 实用程序创建密码文件并将其加密。
d. 将 GBASEDBTDIR 环境变量设置为指向安装了连接管理器的目录。
e. 在连接管理器配置文件的头中,将 LOCAL_IP 参数设置为计算机上 NIC 的可用 TCP/IP 地址。例如,如果应用程序服务器包含两个 NIC,其中 NIC1 的 TCP/IP 地址为为 9.25.151.14,NIC2 的 TCP/IP 地址为 9.25.151.15,那么参数条目为:
```info
LOCAL_IP 9.25.151.14,9.25.151.15
```f. 在连接管理器配置文件的主体中,配置服务级别协议 (SLA)。
g. 在连接管理器配置文件的主体中,将 FOC 参数的 PRIORITY 属性设置为大于 0 的值。例如,要启用网络监视并设置最高优先级,请输入以下内容:
```info
PRIORITY=1
```h. 在连接管理器配置文件的主体中,将 FOC 参数的 ORDER 属性设置为 ENABLED。
```info
ORDER=ENABLED
``` -
在每个数据库服务器上执行以下步骤:
a. 在 sqlhosts 文件中,创建应用程序服务器和所有 SLA 的条目。
b. 启动每个数据库服务器实例。
-
启动每个连接管理器实例。
现在,如果发生网络故障,连接管理器将立即启动故障转移。连接管理器将确保在发生网络故障时,应用程序服务器可保持与数据库服务器的连接。
要在网络故障转移后返回到原始网络配置,请参阅集群故障转移、重定向和复原。
监视连接管理器
有工具可用于帮助诊断使用连接管理器引起的问题。
连接管理器日志文件中包含有关服务级别协议的信息、故障转移配置的信息和状态信息。 启动连接管理器时,将显示日志文件的位置。
除了检查日志文件之外,还可以使用服务器随附的工具。可以通过以下方式监视连接管理器的状态:
- 使用 onstat 命令显示可用于对问题进行故障诊断的统计信息。
确定连接管理器的状态
可以使用 onstat 实用程序来显示有关活动连接管理器实例的信息。
使用 onstat -g cmsm 命令可显示连接到服务器实例的连接管理器守护程序,还可显示守护程序已处理的连接数。请参阅《GBase 8s 管理员参考》 以获取有关示例的更多信息。
以下代码是对单个活动连接管理器实例使用 onstat -g cmsm 命令生成的示例输出。
Connection Manager Name: argo
Hostname: argo
SLA Connections Service/Protocol Rule
oltp 9 9593/onsoctcp primary
oltp_ssl 4 9596/onsocssl primary MODE=PROXY
report 0 9594/onsoctcp SDS,HDR,RSS
Failover Configuration:
Connection Manager name Rule Timeout State
argo SDS,HDR,RSS 10 Active Arbitrator, Primary is up
以下代码是对两个活动连接管理器实例使用 onstat -g cmsm 命令生成的示例输出。
Connection Manager Name: reynolds
Hostname: argo
SLA Connections Service/Protocol Rule
oltp 9 9593/onsoctcp primary
oltp_ssl 4 9596/onsocssl primary mode=proxy
report 0 9594/onsoctcp SDS,HDR,RSS
Connection Manager Name: stimpson
Hostname: argo
SLA Connections Service/Protocol Rule
oltp2 9 19903/onsoctcp primary
report2 0 19904/onsoctcp SDS,HDR,RSS
Failover Configuration:
Connection Manager name Rule Timeout State
argo
SDS,HDR,RSS 10 Active Arbitrator, Primary is up
argo2
SDS,HDR,RSS 0 Primary is up
停止连接管理器
不再希望执行连接重定向时,可停止连接管理器实例。
先决条件:
仅限 UNIX: 只有用户 gbasedbt 才能运行 oncmsm 命令。如果为用户 root 或 DBSA 组的成员授予了连接到 sysadmin 数据库的特权,那么用户 root 或 DBSA 组的该成员也可运行 oncmsm。
要停止连接管理器实例,请执行以下操作:
-
登录到运行连接管理器实例的计算机。
-
使用带 -k 选项的 oncmsm 实用程序。
oncmsm -k connection_manager_name
动态重新配置连接管理器
可以使用连接管理器的重新装入选项来添加或更改服务级别协议、故障转移参数、日志文件名、调试或其他选项。
先决条件:
仅限 UNIX: 只有用户 gbasedbt 才能运行 oncmsm 命令。如果为用户 root 或 DBSA 组的成员授予了连接到 sysadmin 数据库的特权,那么用户 root 或 DBSA 组的该成员也可运行 oncmsm。
可以编辑现有配置文件,或将原始文件替换为其中包含新参数的文件。新选项将立即生效。
要重新装入配置选项,请使用 -r 参数:
oncmsm -r connection_manager_name
connection_manager_name 是要重新装入的连接管理器实例的名称。因为同时可以有多个连接管理器实例处于活动状态,所以有必要指定连接管理器实例的名称。
使用 onstat 实用程序可确定连接管理器实例的名称:onstat -g cmsm
例如,要重新装入名称为 cm_1 的连接管理器实例的配置文件,请执行以下操作:
-
使用新服务级别协议、故障转移参数、日志文件名或调试选项修改现有连接管理器配置文件。
-
在运行连接管理器的计算机上,运行:oncmsm -r cm_1
连接管理器将装入新参数。
将较旧格式的连接管理器配置文件转换为最新格式
GBase 8s Client Software Development Kit (Client SDK) V3.70.xC3 之前各版本中的连接管理器配置文件与当前版本的连接管理器不兼容。必须使用命令行选项转换 3.70.xC3 之前版本的配置文件。
先决条件:
- 在 UNIX™ 上,必须以用户 gbasedbt 或 root 身份登录才能转换配置文件。
- 必须具有对要转换的配置文件的读许可权。
- 必须具有对要创建的配置文件的写许可权。
- 如果转换多个配置文件,那么必须将每个文件中的 SLA 定义合并为一个配置文件。
即使连接管理器当前正在运行,也可以转换连接管理器的配置文件。
要将连接管理器文件转换为当前格式,请执行以下操作:
登录到运行连接管理器实例的计算机。
运行带 -n 选项的 oncmsm 实用程序,并指定新旧配置文件的路径和文件名。
如果连接管理器已在运行,那么必须重新启动连接管理器以使用新配置文件。
集群故障转移、重定向和复原
要保持可用性,必须计划在故障后对主服务器进行故障转移,从不可用的服务器重定向客户机连接,以及将集群复原到其原始配置。
故障转移配置
高可用性集群中发生故障意味着其中一个服务器不再可用。由于高可用性集群的目的是要保持可用性,因此必须计划在主服务器不可用时,集群中的某个辅助服务器成为主服务器。控制故障转移的最佳方式是配置连接管理器来执行到指定服务器的故障转移。
设置 DRAUTO 配置参数以指定如何执行故障转移,然后在现有主服务器发生故障时使用以下某种方法来创建新的主服务器:
- 连接管理器
- ISV 集群管理软件
- 手动转换
利用 ISV 集群管理软件进行故障转移
可以使用独立软件供应商 (ISV) 集群管理软件,而不是连接管理器来管理高可用性集群环境中的故障转移处理。
如果高可用性集群中的主服务器遇到问题,需要辅助服务器充当主服务器角色,那么在执行实际的故障转移之前,在发生故障的主服务器上禁止磁盘 I/O,而在新的主服务器上允许磁盘 I/O 非常重要。 另外,必须阻止对发生故障的主服务器的网络访问。 特别是对 SSC 辅助服务器,如果未正确完成这些步骤,有可能损坏磁盘。
从高可用性集群环境中的服务器启用磁盘 I/O 操作的机制称为 I/O 防护。I/O 防护通过回调脚本进行配置。 如果主服务器发生故障,在辅助服务器充当主服务器角色之前,故障转移进程会在辅助服务器上执行回调脚本。 该脚本调用特定于 I/O 的任何命令,以便启用或禁用磁盘存取。该脚本启用对要充当主服务器的服务器上共享磁盘的写访问权,并禁用对发生故障的服务器上共享磁盘的写访问权。
可以通过 FAILOVER_CALLBACK 配置参数指定当数据库服务器从辅助服务器转换为主服务器,或从辅助服务器转换为标准服务器时,要运行的脚本名称。 $GBASEDBTDIR/etc 目录中提供了一个临时脚本,名称为 ifx_failover_callback.sh (UNIX™) 。 配置后,在辅助服务器转换为主服务器或标准服务器之前,将执行由 FAILOVER_CALLBACK 指定的脚本。
可根据高可用性集群的类型执行以下操作之一来测试故障转移脚本:
- 将 SSC 辅助服务器转换为主服务器。
- 如果 DRAUTO 配置参数设置为 0,那么关闭主服务器并将 HAC 辅助服务器转换为标准方式。
- 如果 DRAUTO 配置参数设置为 1,那么关闭 HAC 对中的主服务器。
- 关闭远程独立集群中的主服务器,并将 RHAC 辅助服务器转换为标准方式。
online.log 中包含 Invoking Failover Callback 消息,运行故障转移脚本后,其中会列出该故障转移脚本的路径和文件名。
请参阅《GBase 8s 管理员参考》中有关 FAILOVER_CALLBACK 配置参数的信息。
如果 FAILOVER_CALLBACK 指定的脚本发生故障(即,如果它返回一个非零退出码),那么从辅助服务器到主服务器(或标准服务器)的故障转移也会失败。 这样的话,DBA 必须手动执行故障转移。
共享文件系统的 I/O 防护
可以配置 I/O 防护以在高可用性集群环境中保护共享资源。
软件或硬件故障可能导致未完成的操作写入到共享存储设备中。使用 I/O 防护可以隔离服务器,以防服务器访问共享存储。如果正在对高可用性集群中的服务器执行维护或测试,那么必须使用 I/O 防护。如果在服务器上或应用程序内检测到问题,集群管理器可检测问题,并阻止该服务器连接到共享数据。
可以配置一个脚本,以在主服务器出现故障时运行。 防护命令通过设置 FAILOVER_CALLBACK 配置参数来调用,启动故障转移时,该参数将运行脚本。
尽管无需 I/O 防护即可使用 GBase 8s 数据库软件,但仍然必须使用 I/O 防护来保护共享磁盘系统,以免遭受意外损失。
I/O 防护的类型
可使用若干类型的 I/O 防护,包括:
- 电源®防护 - 检测到问题时关闭节点电源。
- 光纤通道开关防护(需要 SCSI-3 持久性组保留)- 通过除去问题节点的保留来阻塞光纤通道设备上的端口。
- 实施 I/O 防护最常用的方法可能是使用光纤通道防护。光纤通道开关支持业界标准 SCSI-3 持久性组保留 (PR) 技术。 PR 技术允许一组系统临时注册到磁盘,并与包含数据的磁盘协调写互斥保留。
在大多数情况下,必须安装集群管理器软件。集群管理器软件提供将命令发出到光纤通道交换机所需的驱动程序和实用程序。例如,Linux™ Cluster Suite 提供名为 fence_scsi 的脚本。Sun Cluster 提供名为 scdidadm 的命令。
也可根据所用集群管理器软件和不同硬件能力来使用其他防护方法。
实施 I/O 防护
可在若干平台上配置 I/O 防护,包括:
- Linux
- Solaris
- AIX®
有关配置 I/O 防护的特定信息,请参阅设备制造商提供的文档。
集群故障
高可用性集群故障是指集群中数据库服务器之间的连接丢失,这可能是多种不同的情况造成的。
以下任一情况均可能导致集群故障:
- 一个数据库服务器的站点上发生灾难性故障(如火灾或大地震)
- 连接数据库服务器的联网电缆被破坏
- 一个数据库服务器上的处理中延迟过长
- 辅助数据库服务器上发生无法由镜像块解决的磁盘故障
集群故障不一定表示某个数据库服务器发生了故障,而只是表示数据库服务器之间的连接丢失。
数据库服务器会将以下任一情况解释为集群故障:
-
超过了指定的超时值。
在正常的集群运行期间,数据库服务器预期集群中的其他数据库服务器进行通信确认。集群中的每个数据库服务器都有一个用于指定秒数的 ONCONFIG 参数 DRTIMEOUT。如果来自集群中另一数据库服务器的确认没有在 DRTIMEOUT 指定的秒数内返回,那么数据库服务器会假定发生了集群故障。
-
集群中的数据库服务器未响应通过网络进行的定期消息传递 (ping) 尝试。
无论主数据库服务器是否向辅助数据库服务器发送任何记录,这两个数据库服务器均会互相执行 ping 操作。如果一个数据库服务器没有响应四次连续 ping 尝试,那么另一数据库服务器会假定发生了集群故障。
集群中每个数据库服务器会在该数据库服务器上 DRTIMEOUT 参数指定的秒数过去之后,向集群中的其他数据库服务器发送 ping。
数据库服务器检测到集群故障后,它会向其消息日志写入一条消息(例如,DR: receive error)并关闭数据复制。如果发生了集群故障,那么两个数据库服务器之间的连接将断开,并且辅助数据库服务器将保持只读方式。
如果辅助数据库服务器在集群故障后仍保持在线状态,并且 DRAUTO 配置参数设置为 1 (RETAIN_TYPE),那么该数据库服务器的类型将自动更改为标准。如果 DRAUTO 设置为 0 (off),那么辅助数据库服务器将顶事尝试重新建立与主数据库服务器的通信。如果 DRAUTO 设置为 2 (REVERSE_TYPE),那么一旦因原始主服务器发生故障(而非因原始主服务器重新启动)导致连接结束,辅助数据库服务器将立即成为主数据库服务器。
如果连接管理器已启用,那么将 DRAUTO 设置为 3 可防止高可用性集群中存在多个主服务器的可能性。 如果尝试使服务器在线以作为主服务器并且 DRAUTO=3,那么连接管理器将验证集群中没有其他活动的主服务器。如果另一台主服务器处于活动状态,那么连接管理器将拒绝该请求。
如果主数据库服务器发生故障,辅助数据库服务器可按以下方法运行:
- 辅助数据库服务器可保持处于逻辑恢复方式。在这种情况下,不采取任何操作。如果您期望 HAC 的连接很快复原,那么这种情况是可取的。
- 辅助数据库服务器可以自动成为标准数据库服务器。此操作称为自动转换。
- 如果您使用手动切换来将数据库服务器方式更改为标准,那么辅助数据库服务器可以成为标准数据库服务器。
自动转换
自动转换意味着集群中的主服务器发生故障后,辅助数据库服务器将自动成为标准数据库服务器(如果 DRAUTO 配置参数设置为 1)或主数据库服务器(如果 DRAUTO 配置参数设置为 2)。
自动转换首先回滚所有打开的事务,然后作为主数据库服务器进入在线模式。仅当辅助数据库服务器的 onconfig 文件中的参数 DRAUTO 设置为 1 (RETAIN_TYPE) 或 2 (REVERSE_TYPE) 时,才会执行自动转换。
由于辅助数据库服务器成为标准或主数据库服务器,因此必须确保以下情况之一:
- 辅助数据库服务器有足够的逻辑日志磁盘空间来使处理什么继续进行而无需备份逻辑日志文件。
- 备份逻辑日志文件。
自动转换只会更改数据库服务器的类型。它不会将客户机应用程序重定向到辅助数据库服务器。
自动转换与手动转换相比有以下优势:
- 从主数据库服务器重定向到辅助数据库服务器的客户机可以继续写入数据和更新数据。
- 转换不会根据监视消息日志的操作程序来查看何时会发生高可用性数据复制故障,然后手动将辅助数据库服务器转换为标准数据库服务器。
自动转换需要非常稳定的网络才能正常运行。
在您成功使原始主数据库服务器恢复为在线状态时,将自动建立集群连接。
- 如果 DRAUTO 设置为 RETAIN_TYPE,那么辅助转为标准的数据库服务器将进行平稳关闭(以确保所有可能写入数据库服务器的客户机没有连接),然后切换回辅助数据库服务器。
- 如果 DRAUTO 设置为 REVERSE_TYPE,那么辅助转为主数据库服务器将直接切换为主类型。不会发生关闭。所有与此数据库服务器连接的应用程序可以保持连接状态。 原始主数据库服务器切换为辅助数据库服务器。
没有可靠网络时的自动转换
尽管自动转换可能是最佳解决方案,但是它不适合所有的环境。
如果主数据库服务器实际上并未发生故障,但是辅助数据库服务器向该主服务器注册失败,请考虑可能发生的情况。例如,如果当辅助数据库服务器由于网速慢或网络不稳定而向主数据库服务器发送信号时,辅助数据库服务器没有收到响应,那么辅助数据库服务器将假设主数据库服务器发生的故障并且自动切换为标准类型。如果当主数据库服务器向辅助数据库服务器发送信号时,主数据库服务器也没有收到响应,那么它将假设辅助数据库服务器发生故障并将关闭数据复制但是仍将保持在线模式。现在主数据库服务器和辅助数据库服务器(已切换为标准类型)都处于在线模式。
如果客户机可以独立地在两个数据库服务器上更新数据,那么对中的数据库服务器将处于以下状态:即每个数据库服务器具有另一数据库服务器所需的逻辑日志记录。 在此情况下,您必须重新启动并通过一整个数据库服务器的 0 级备份来执行初始数据复制,如首次启动 HAC 所述。 因此,如果网络不是十分稳定的话,那么您可能不会希望使用自动转换。无法在以前的辅助服务器上恢复 HAC,而不带任何丢失事务的风险。
手动转换
手动转换意味着辅助数据库服务器的管理员将辅助数据库服务器的类型更改为标准类型。
辅助数据库服务器回滚任何打开的事务,然后进入在线模式(如同标准数据库服务器一样),这样它就可以接受来自客户机应用程序的更新。
将脱机服务器连接到新的主服务器
故障转移之后,必须将所有脱机的辅助服务器重新连接到新的主服务器。
如果高可用性集群中的主服务器发生故障,系统将通知所有在线辅助服务器发生了该故障。辅助服务器将连接到新主服务器,并继续运行。 但是,故障转移时未在线的 RHAC 辅助服务器和 HAC 辅助服务器不会收到故障转移通知,因此这些服务器恢复在线时会尝试连接到原始(发生故障的)主服务器。在这种情况下,必须在这些辅助服务器上手动重置主服务器。
发生故障转移时在脱机的辅助服务器上运行以下命令。
-
对于 HAC 辅助服务器:
oninit -PHY
onmode -d secondary new_primarynew_primary 指示当前主服务器的名称。
-
对于 RHAC 辅助服务器:
oninit -PHY
onmode -d RSS new_primarynew_primary 指示当前主服务器的名称。
数据复制客户机的重定向和连接
当高可用性集群中的任何服务器变为不可用时,与该服务器的任何客户机连接都应重定向到可用的服务器。处理连接重定向的最佳方法是使用连接管理器将客户机连接自动重新连接到在服务级别协议 (SLA) 中指定的服务器。或者,可以使用环境变量或连接信息来控制连接重定向。
如果不使用连接管理器,那么可以通过将应用程序配置为连接到服务器所属的服务器组,自动将客户机重定向到集群中其他数据库服务器。 创建与服务器组的连接时,缺省情况下将建立与组中当前主服务器的连接。如果因为某个服务器发生故障而导致复制失败,那么将建立与在线服务器的连接(以标准方式或不带辅助服务器的主服务器方式)。您还可以从应用程序内自动执行此操作。 在 GBase 8s Client Software Development Kit (Client SDK)中包含的某些客户机连接驱动程序有特定机制以用于使重定向自动化。有关详细信息,请参阅《GBase 8s Client Software Development Kit (Client SDK)》文档。
当您设计客户机应用程序时,您必须对重定向策略作出一些决策。您尤其必须决定是否在应用程序内处理重定向以及要使用哪种重定向机制。三种不同的重定向机制如下所示:
- 用 DBPATH 环境变量进行自动重定向
- 管理员用连接信息控制重定向
- 用户用 GBASEDBTSERVER环境变量控制重定向
您所用的机制决定您可在应用程序中使用的 CONNECT 语法。
使用 DBPATH 环境变量自动重定向客户机
可以在应用程序中使用 DBPATH 环境变量来重定向连接。
管理员必须执行的操作
管理员不会执行任何操作来重定向客户机,但他们可能需要照管数据库服务器的类型。
用户的任务
如果您的应用程序包含测试连接是否已失败的代码,并发出重新连接语句(如有必要),那么重定向得以自动处理。用户没有任何职责。
如果您的应用程序不包含这样的代码,那么正在运行客户机的用户必须退出并重新启动所有应用程序。
DBPATH 重定向方法的工作原理
当应用程序没有在 CONNECT 语句中明确指定数据库服务器,以及 GBASEDBTSERVER 环境变量指定的数据库服务器不可用时,客户机将使用 DBPATH 环境变量来定位数据库(和数据库服务器)。
如果复制对中的一台数据库服务器不可用,那么使用该数据库服务器的应用程序将其 DBPATH 环境变量设置为复制对中的另一数据库服务器时,这些应用程序无需重新设置其 GBASEDBTSERVER 环境变量。它们的 GBASEDBTSERVER 环境变量必须始终包含其经常使用的数据库服务器的名称,并且它们的 DBPATH 环境变量必须始终包含对中备用数据库服务器的名称。
例如,如果应用程序通常使用名为 cliff_ol 的数据库服务器,并且在复制对中与 cliff_ol 成对的数据库服务器名为 beach_ol,那么那些应用程序的环境变量将如下所示:
GBASEDBTSERVER cliff_ol
DBPATH //beach_ol
因为当应用程序发出 CONNECT 语句时 DBPATH 环境变量是只读变量(如果需要),所以应用程序必须重新启动才能执行重定向。
应用程序可以包含测试连接是否已失败的代码,如果包含,那么尝试重新连接。如果应用程序有该代码,就无需重新启动。
您可以对该重定向方法使用 CONNECT TO 数据库语句。为使该方法可起作用,您不能使用任一以下语句:
- CONNECT TO DEFAULT
- CONNECT TO database@dbserver
- CONNECT TO @dbserver
该限制的原因是如果 CONNECT 语句指定了数据库服务器,应用程序就不使用 DBPATH。有关 DBPATH 的更多信息,请参阅《GBase 8s SQL 指南:参考》。
使用连接信息重定向客户机
通过使用 sqlhosts 信息,可以将客户机连接重定向到新的主服务器。
连接信息重定向方法依赖于这样的事实,即当应用程序连接到数据库服务器,它就使用连接信息找到数据库服务器。
如果复制对中的一个数据库服务器不可用,管理员可在连接信息中更改不可用数据库服务器的定义。按更改客户机连接信息中所述,不可用数据库服务器的字段(dbservername 字段除外)均更改为指向复制对中余下的数据库服务器。
因为当发出 CONNECT 语句时读取了连接信息,所以应用程序可能需要重新启动才能执行重定向。应用程序可以包含用于测试连接是否已失败的代码,也可以包含用于发出重新连接语句的代码(如有必要)。如果连接已失败,将自动进行重定向,并且您无需重新启动应用程序即可进行重定向。
应用程序可使用以下连接语句来支持该重定向方法:
- CONNECT TO database@dbserver
- CONNECT TO @dbserver
如果 GBASEDBTSERVER 环境变量始终保持设置为同一数据库服务器名称并且 DBPATH 环境变量未设置,那么应用程序也可使用以下连接语句:
- CONNECT TO DEFAULT
- CONNECT TO database
在 UNIX™ 上,GBASEDBTSQLHOSTS 环境变量在 $GBASEDBTDIR/etc/sqlhosts 中指定连接信息的完整路径名和文件名。有关 GBASEDBTSQLHOSTS 的更多信息,请参阅《GBase 8s SQL 指南:参考》。
更改客户机连接信息
要使用连接信息来重定向客户机,您必须为客户机更改连接信息并更改其他连接文件(如有必要)。
要更改有关客户机的连接信息,请执行以下操作:
-
在 sqlhosts 文件或注册表中,注释掉发生故障的数据库服务器的条目。
-
在 servername 字段中添加指定故障数据库服务器的 dbservername 的条目,并在 nettype、hostname 和 servicename 字段中添加客户机要重定向的目标数据库服务器的信息。
-
如果发生故障,那么在 sqlhosts 文件或注册表中使用以下选项将应用程序重定向至其他数据库服务器:
a. 连接重定向选项
b. 组末尾选项
c. 组选项
-
根据需要,在 /etc/hosts 文件(在 UNIX™ 上)中添加 hostname 条目,以指定正在运行作为客户机重定向目标的数据库服务器的计算机。
-
根据需要,在 /etc/services 文件(在 UNIX 上)添加 servicename 条目,以指定正在运行作为客户机重定向目标的数据库服务器的计算机。
下图显示可以如何修改连接值以重定向客户机。
无需在正运行数据库服务器的任一计算机上更改连接信息中的条目。
图: cliff_ol 数据库服务器发生故障前后的连接值
连接到数据库服务器
在管理员更改连接信息和其他连接文件(如果需要)后,客户机在发出其下一个 CONNECT 语句时会连接至管理员要将客户机重定向到的目标数据库服务器。
如果您的应用程序包含测试连接是否已失败的代码,并发出重新连接语句(如有必要),那么重定向得以自动处理。用户没有任何职责。如果您的应用程序不包含这样的代码,那么正在运行客户机的用户必须退出并重新启动所有应用程序。
服务器组的自动重定向
可以使用 sqlhosts 文件中的组选项来指定应用程序连接到的服务器组而不是单个数据库服务器。要使连接重定向自动化,请将主服务器和辅助服务器的数据库服务器定义均添加到服务器组定义。缺省情况下,建立了到 HAC 服务器组的连接请求时,会将该连接路由到主服务器。如果主服务器不可用,那么连接请求将路由到故障转移处理之后提升为主服务器的辅助服务器。
例如,以下 sqlhosts 条目提供了 HDR 服务器组 g_hdr,以及主服务器定义 hdr_prim 和辅助服务器定义 hdr_sec。
#dbservername nettype hostname servicename options
g_hdr group - - i=1
hdr_prim ontlitcp machine1pri port1 g=g_hdr
hdr_sec ontlitcp machine1sec port1 g=g_hdr
应用程序可使用以下连接语句来支持该重定向方法:
- CONNECT TO database@dbserver_group
- CONNECT TO @dbserver_group
如果您的应用程序包含测试连接是否已失败的代码,并发出重新连接语句(如有必要),那么重定向得以自动处理。用户没有任何职责。如果您的应用程序不包含这样的代码,那么正在运行客户机的用户必须退出并重新启动所有应用程序。
使用 GBASEDBTSERVER 环境变量重定向客户机
应用程序未在 CONNECT 语句中显式指定数据库服务器时,可以使用 GBASEDBTSERVER 环境变量重定向方法,以便客户机连接至 GBASEDBTSERVER 环境变量指定的数据库服务器。
如果集群中的某个数据库服务器不可用,那么使用该数据库服务器的应用程序可将其 GBASEDBTSERVER 环境变量重置为集群中的另一数据库服务器以访问相同数据。
应用程序仅当它们启动时才读取 GBASEDBTSERVER 环境变量的值。因此,必须重新启动应用程序以识别环境变量中的更改。
要支持该重定向方法,您可以使用以下连接语句:
- CONNECT TO DEFAULT
- CONNECT TO database
您不能为该方法使用 CONNECT TO database@dbserver 或 CONNECT TO @dbserver 语句。当数据库服务器已明确命名,CONNECT 语句不使用 GBASEDBTSERVER 环境变量来查找数据库服务器。
管理员不会执行任何操作来重定向客户机,但他们可能需要更改数据库服务器的类型。
正在运行客户机应用程序的用户在决定用 GBASEDBTSERVER 环境变量重定向客户机时必须执行以下三个步骤。
要使用 GBASEDBTSERVER 环境变量重定向客户机,请执行以下操作:
- 退出应用程序。
- 将 GBASEDBTSERVER 环境变量更改为保存复制对中另一数据库服务器的名称。
- 重新启动应用程序。
使用应用程序代码重定向客户机
如果使用 DBPATH 环境变量或连接信息来重定向连接,那么可以在客户机中包含一个例程,用于在客户机遇到集群故障时处理错误。该例程可以调用包含循环(该循环重复尝试连接到集群中的另一个数据库服务器)的其他函数。该例程重定向客户机但不需要用户退出应用程序并重新启动程序。
以下示例显示的是在使用 DBPATH 重定向机制的客户机应用程序中,在尝试重新连接时会循环的函数。在它建立了连接后,它还会测试数据库服务器的类型以确保服务器不是辅助数据库服务器。如果数据库服务器仍为辅助类型,那么它调用另一函数来提醒用户(或数据库服务器管理员)数据库服务器无法接受更新。
/* The routine assumes that the GBASEDBTSERVER environment
* variable is set to the database server that the client
* normally uses and that the DBPATH environment variable
* is set to the other database server in the pair.
*/
#define SLEEPTIME 15
#define MAXTRIES 10
main()
{
int connected = 0;
int tries;
for (tries = 0;tries < MAXTRIES && connected == 0;tries++)
{
EXEC SQL CONNECT TO "superstores";
if (strcmp(SQLSTATE,"00000"))
{
if (sqlca.sqlwarn.sqlwarn6 != 'W')
{
notify_admin();
if (tries < MAXTRIES - 1)
sleep(SLEEPTIME);
}
else connected =1;
}
}
return ((tries == MAXTRIES)? -1:0);
}
本示例假设 DBPATH 重定向机制并使用支持 DBPATH 重定向方法的 CONNECT 语句格式。 如果您使用连接信息来重定向,您可以有不同的连接语句,如下所示:
EXEC SQL CONNECT TO "superstores@cliff_ol";
在本示例中,superstores@cliff_ol 是客户机计算机识别的数据库服务器上的数据库。 要进行重定向,管理员必须更改连接信息,以使该名称指向不同的数据库服务器。 可能需要调整客户机在尝试连接前等待的时间量或函数定义的尝试次数。为数据库服务器上的管理操作提供足够时间(以更改连接信息或将辅助数据库服务器的类型更改为标准类型)。
比较重定向方法
不同的重定向方法具有不同的需求。
以下各表总结了重定向机制之间的不同之处。
表 1. DBPATH 连接的重定向方法
DBPATH | 自动重定向 | 用户重定向 |
---|---|---|
何时重定向客户机? | 当客户机下次尝试连接指定数据库时 | 当客户机下次尝试连接指定数据库时 |
客户机是否需要重新启动以进行重定向? | 否 | 是 |
重定向的范围是哪些? | 重定向个别客户机 | 重定向个别客户机 |
需要对环境变量进行更改吗? | 否 | 否 |
表 2. 连接信息的重定向方法
连接信息 | 自动重定向 | 用户重定向 |
---|---|---|
何时重定向客户机? | 在管理员更改连接信息后,当客户机下次尝试建立与数据库服务器的连接时 | 在管理员更改连接信息后,当客户机下次尝试建立与数据库服务器的连接时 |
客户机是否需要重新启动以进行重定向? | 否 | 是 |
重定向的范围是哪些? | 重定向所有使用给定数据库服务器的客户机 | 重定向个别客户机 |
需要对环境变量进行更改吗? | 否 | 否 |
表 3. GBASEDBTDIR 连接的重定向方法
GBASEDBTDIR | 用户重定向 |
---|---|
何时重定向客户机? | 当客户机重新启动并读取 GBASEDBTSERVER 环境变量的新值时 |
客户机是否需要重新启动以进行重定向? | 是 |
重定向的范围是哪些? | 重定向个别客户机 |
需要对环境变量进行更改吗? | 是 |
表 4. “连接管理器”连接的重定向方法
连接管理器 | 用户重定向 |
---|---|
何时重定向客户机? | 当获得已配置的服务级别协议时。 |
客户机是否需要重新启动以进行重定向? | 否 |
重定向的范围是哪些? | 重定向个别客户机 |
需要对环境变量进行更改吗? | 否 |
故障后恢复 HAC 和 RHAC 集群
将 HAC 或 RHAC 集群复原回原始配置时,可能需要复原关键介质,以及重新启动和配置集群中的服务器。
磁盘故障的结果取决于磁盘故障发生在主数据库服务器上还是辅助数据库服务器上、磁盘上的块是否包含关键介质(根数据库空间、逻辑日志文件或物理日志)以及块是否已镜像。
如果块已镜像,您可以执行恢复,如同您为使用镜像的标准数据库服务器所做的一样。
如果块未镜像,那么复原主数据库服务器的过程取决于发生故障的磁盘是否包含关键介质:
- 如果磁盘中包含关键介质,那么主数据库服务器将发生故障。必须使用主数据库空间备份(或如果辅助数据库服务器切换为标准方式并重定向了活动,那么使用辅助数据库空间备份)执行完全复原。
- 如果磁盘不包含关键介质,您可以用热复原来分别复原受影响的数据库空间。热复原由两个部分组成:首先从备份对发生故障的数据库空间进行复原,随后对自该数据库空间备份以来所有写入的逻辑日志记录进行逻辑复原。您必须在执行热复原之前备份所有逻辑日志文件。
在块未镜像的情况下,如果磁盘包含关键介质,辅助数据库服务器将发生故障;但如果磁盘不包含关键介质,辅助数据库服务器将保持在线状态。在这两种情况下,都必须在主数据库服务器上使用数据库空间备份执行完全复原。在第二种情况下,您无法从辅助数据库空间备份复原所选的数据库空间,因为此时它们可能是从主数据库服务器上的相应数据库空间派生而来的。您必须执行完整的复原。
关键数据损坏后恢复集群
如果 HAC 或 RHAC 集群中的某个数据库服务器遇到损坏根数据库空间(包含逻辑日志文件或物理日志的数据库空间)的故障,那么必须将发生故障的数据库服务器视为在磁盘上没有任何数据,并且假定您是首次启动 HAC 或 RHAC 集群。 将正在运行的带有完整磁盘的数据库服务器作为带有数据的数据库服务器来使用。
主服务器故障
对于以下步骤,假设配置中包含名为 srv_A 的主服务器和名为 srv_B 的 HAC 辅助服务器。重新启动 RHAC 集群的步骤与此类似。
要在严重介质故障后重新启动 HAC,请执行以下操作:
-
srv_B 上的 DRAUTO 配置参数会影响您下一步的操作
- 如果此参数设置为 0,那么必须通过运行 onmode -d make primary 命令将服务器转换为主服务器。
- 如果此参数设置为 1 (RETAIN_TYPE),那么通过运行 onmode -d make primary 命令将服务器转换为主服务器。
- 如果设置为 2 (REVERSE_TYPE),那么一旦因旧的主服务器发生故障导致连接结束,辅助数据库服务器将立即成为主数据库服务器。
-
从上次数据库空间备份复原 srv_A(主数据库服务器)。
-
使用 onmode -d 命令将 srv_A 设置为 HAC 辅助数据库服务器并启动 HAC。
onmode -d 命令可在 srv_B 上从逻辑日志文件启动逻辑恢复。如果由于已在 srv_B上备份并释放了逻辑日志文件而无法完成逻辑恢复,那么 HAC 要到执行下一步时才会启动。
-
应用来自 srv_B 的逻辑日志文件(新的主数据库服务器),这些文件已备份到磁带。HAC 对现在可运行;但是,将交换 srv_A 和 srv_B 的角色。要将 srv_A 和 srv_B 交换回其原始角色,请遵循指示信息:在辅助服务器成为主服务器后恢复 HAC 集群。
表 1. 主数据库服务器上发生严重介质故障后恢复 HAC 的步骤
步骤 | 在主数据库服务器 (svr_A) 上 | 在辅助数据库服务器 (svr_B) 上 |
---|---|---|
1. | onmode 命令 onmode -d make primary srv_A | |
2. | ontape 命令 ontape -p ON-Bar 命令 onbar -r -p | |
3. | onmode 命令 onmode -d secondary srv_B | |
4. | ontape 命令 ontape -l ON-Bar 命令 onbar -r -l |
辅助服务器故障
如果辅助数据库服务器遇到严重介质故障,请遵循首次启动集群的步骤来恢复集群。
主服务器和辅助服务器故障
如果正在运行复制对中数据库服务器的两台计算机不幸同时遇到损坏根数据库空间(包含逻辑日志文件或物理日志的数据库空间)的故障,那么必须重新启动集群。
要在两个数据库服务器上都发生严重介质故障后重新启动 HAC 或 RHAC 集群:
- 从存储空间和逻辑日志备份复原主数据库服务器。
- 复原主数据库服务器后,请将另一台发生故障的数据库服务器视为在磁盘上没有任何数据,并且假定您是首次启动 HAC 或 RHAC 集群。
网络故障后重新启动 HAC 或 RHAC 集群
发生网络故障之后,HAC 或 RHAC 集群可能需要重新启动。在网络故障后,主数据库服务器处于在线模式,辅助数据库服务器处于只读方式。复制在两个数据库服务器上都会关闭 (state = off)。
可能不需要重新启动集群,因为主数据库服务器会尝试每 10 秒重新连接一次,并且每 2 分钟显示一次有关无法连接的消息。
如果集群未自动重新启动,那么重新建立连接时,可以通过在辅助服务器上运行以下命令来重新启动集群:
- onmode -d secondary primary_name,以使该辅助服务器成为主服务器。
辅助服务器发生故障时重新启动 HAC 或 RHAC 集群
如果在辅助服务器发生故障后必须重新启动 HAC 或 RHAC 集群,那么除了启动该辅助服务器外,还可能需要在该辅助服务器上执行逻辑日志复原。
这些步骤假设您自辅助数据库服务器发生故障后一直按需要备份主数据库服务器上的逻辑日志文件。
表 1. 辅助数据库服务器上发生故障后的重新启动步骤
步骤 | 在主服务器上 | 在辅助服务器上 |
---|---|---|
1. | 主数据库服务器必须处于在线模式。 | oninit 如果您在消息日志中接收到以下消息,请继续步骤 2 : DR: Start Failure recovery from tape |
2. | ontape 命令 ontape -l ON-Bar 命令 onbar -r -l |
在辅助服务器成为主服务器后恢复 HAC 集群
如果在原始主服务器发生故障后,HAC 集群中的辅助服务器成为主服务器,那么可以使用脚本来重新建立原始主服务器,然后将当前主服务器转换回辅助服务器。
假设主服务器 srv_pri 遇到了错误,以至于要故障转移至辅助服务器 srv_hdr_sec。此时,主服务器是 srv_hdr_sec,并且集群中的所有其他辅助服务器现在都指向 srv_hdr_sec。
要将集群复原至 srv_pri 执行故障转移之前的状态,请遵循以下步骤:
-
通过运行适当命令将 srv_pri 初始化为 HAC 辅助服务器:
UNIX™ 系统:
$GBASEDBTDIR/bin/hdrmksec.sh srv_hdr_sec
-
通过运行以下命令将 srv_pri 更改为主服务器:
onmode -d make primary srv_pri
此命令将使 srv_pri 成为主服务器,并将集群中的其他任何辅助服务器重定向为指向新的主服务器。 该命令也会关闭原有 HAC 主服务器 (srv_hdr_sec),这是因为高可用性环境中只能存在一个主服务器。
-
通过运行以下命令将 srv_hdr_sec 初始化为 HAC 辅助服务器:
在 UNIX 系统上:
$GBASEDBTDIR/bin/hdrmksec.sh srv_pri
主服务器发生故障时重新启动
在主服务器发生故障后重新启动 HAC 或 RHAC 集群的过程取决于是否辅助服务器是否成为主服务器,以及该辅助服务器成为主服务器的方法。
辅助数据库服务器未更改为标准数据库服务器
如果主数据库服务器发生故障后必须重新启动 HAC 或 RHAC 集群,并且辅助数据库服务器没有更改为标准数据库服务器,请使用 oninit 命令启动主数据库服务器。
辅助数据库服务器已手动更改为标准数据库服务器
如果主数据库服务器发生故障后必须重新启动 HAC 或 RHAC 集群,并且您已将辅助数据库服务器手动更改为标准数据库服务器,请完成下表中的步骤。
表 1. 将辅助数据库服务器更改为标准服务器后的重新启动步骤
步骤 | 在主数据库服务器上 | 在辅助数据库服务器上 |
---|---|---|
1. | onmode -s 该步骤将辅助数据库服务器(现为标准服务器)变为静态模式。所有连接至该数据库服务器的客户机必须断开连接。执行更新的应用程序必须重定向到主服务器。 | |
2. | onmode -d secondary prim_name | |
3. | oninit 如果所有写入辅助数据库服务器的逻辑日志记录仍在辅助数据库服务器磁盘上,那么当您发出 oninit 命令时主数据库服务器将从该磁盘恢复这些记录。 如果您已备份并释放辅助数据库服务器上的逻辑日志文件,那么这些文件中的记录不再在磁盘上。 在这种情况下,会提示您从磁带恢复这些逻辑日志文件(步骤 4)。 对于 ontape 用户: 如果您希望通过网络读取逻辑日志记录,请将逻辑日志磁带设备设置为正在运行辅助数据库服务器的计算机上的设备。 | |
4. | 如果提示您从磁带恢复逻辑日志记录,请执行此步骤。 ontape 命令 ontape -l ON-Bar 命令 onbar -r -l |
辅助数据库服务器已自动更改为标准数据库服务器
如果主数据库服务器发生故障后必须重新启动 HAC 或 RHAC 集群,并且辅助数据库服务器已自动更改为标准数据库服务器,请完成下表中所示的步骤。
表 2. 将辅助数据库服务器更改为标准服务器后的自动重新启动步骤
步骤 | 在主数据库服务器上 | 在辅助数据库服务器上 |
---|---|---|
1. | oninit 如果 DRAUTO = 1,那么此数据库服务器的类型将设置为主数据库服务器。 如果 DRAUTO = 2,那么当此数据库服务器重新启动时,其类型将设置为辅助数据库服务器。 如果所有写入辅助数据库服务器的逻辑日志记录仍在辅助数据库服务器磁盘上,那么当您发出 oninit 命令时主数据库服务器将从该磁盘恢复这些记录。 如果您已备份和释放的逻辑日志文件位于辅助数据库服务器上,那么这些文件中的记录将不再位于磁盘之上。在这种情况下,会提示您从磁带恢复这些逻辑日志文件(步骤 2)。 对于 ontape 用户: ● 将逻辑日志磁带设备设置为正在运行辅助数据库服务器的计算机上的设备。 | 如果 DRAUTO = 1 ,那么当您进行主备份时,辅助数据库服务器将自动平稳关闭。这可确保断开所有客户机的连接。然后,类型切换回辅助。执行更新的所有应用程序必须重定向到主数据库服务器。 如果 DRAUTO = 2,那么辅助数据库服务器将自动转换为主数据库服务器。在旧的主数据库服务器重新启动并与其他服务器连接,并确定它现在是主数据库服务器之后,它将成为辅助数据库服务器。 |
2. | 如果提示您从磁带恢复逻辑日志记录,请执行此步骤。 ontape 命令 ontape -l ON-Bar 命令 onbar -r -l |
数据损坏后恢复共享磁盘集群
如果共享磁盘集群发生故障,必须对受影响的数据库空间执行复原。需要执行的复原类型取决于是否损坏了关键数据。
关键数据已损坏
如果主服务器发生了故障,导致根数据库、包含逻辑日志文件的数据库空间或包含物理日志的数据库空间损坏,那么必须将失败的数据库服务器视为其磁盘上没有数据。 必须对主服务器执行完全复原。在这种情况下,主服务器和 SSC 辅助服务器处于脱机状态。
要在介质出现严重故障之后恢复共享磁盘集群,请执行以下操作:
-
对主服务器执行完全复原。根据备份是使用 ON-Bar 还是 ontape 实用程序执行的,运行以下某个命令:
- onbar -r
- ontape -r
复原完成之后,主服务器将重新启动。
-
重新启动 SSC 辅助服务器。
此外,也可以对主服务器上的关键数据库空间执行冷复原,重新启动 SSC 辅助服务器,然后对非关键数据库空间执行热复原。
关键数据未损坏
如果不包含关键介质的磁盘出现故障,可以使用热复原来复原受影响的数据库空间。在这种情况下,主服务器和 SSC 辅助服务器处于在线状态。
要恢复共享磁盘集群中的非关键数据,请执行以下操作:
- 关闭并重新启动 SSC 辅助服务器。
- 对受影响的数据库空间执行热复原。根据备份是使用 ON-Bar 还是 ontape 实用程序执行的,运行以下某个命令:
- onbar -r 加上要复原的数据库空间的名称
- ontape -r -D 加上要复原的数据库空间的名称
在辅助服务器成为主服务器后恢复 SSC 集群
如果在原始主服务器发生故障后,SSC 集群中的辅助服务器成为主服务器,那么可以使用脚本来重新建立原始主服务器,然后将当前主服务器转换回辅助服务器。
在该示例中,主服务器 srv_pri 故障转移至 SSC 辅助服务器 srv_sds_sec。此时,主服务器是 srv_sds_sec,并且集群中的所有辅助服务器现在都指向 srv_sds_sec。要将集群复原至 srv_pri 执行故障转移之前的状态,请遵循以下步骤:
-
如果必要,请在 srv_pri 的 onconfig 文件中设置以下参数:
SDS_ENABLE 1
SDS_PAGING <path 1>,<path 2>
SDS_TEMPDBS <dbsname>,<dbspath>,<pagesize>,<offset>,<size>dbsname 值必须唯一。此外,dbsname 必须在所有现有的数据库空间、BLOB 空间和智能大对象空间空间中唯一,包括从主服务器继承的临时空间(可能已禁用)。如果有多个 SSC 辅助服务器,dbsname 值对于每个服务器必须唯一,且不得与其他任何 SSC 辅助服务器或主服务器共享。请参阅设置共享磁盘辅助服务器,以获取有关设置这些参数的信息。
-
通过在 srv_pri 上运行 oninit 命令,将 srv_pri 初始化为 SSC 辅助服务器。
-
手动对 srv_pri 执行故障转移以便使其成为主服务器:
onmode –d make primary srv_pri
以上命令从集群中除去 srv_sds_sec,并使 srv_pri 成为主服务器。
-
通过在 srv_sds_sec 上运行 oninit 命令,将 srv_sds_sec 复原为 SSC 辅助服务器。